JDK8新特性:Stream流

目录

1.获取Stream流

2.Stream流常见的中间方法

3.Stream流常见的终结方法

1、 Stream 是什么?有什么作用?结合了什么技术?
●也叫 Stream 流,是Jdk8开始新增的一套 API ( java . util . stream .*),可以用于操作集合或者数组的数据。.

优势: Stream 流大量的结合了 Lambda 的语法风格来编程,提供了一种更加强大更加简单的方式操作集合或者数组中的数据,代码更简洁,可读性更好。
2、说说 Stream 流处理数据的步骤是什么?

package com.xinbao.d8_stream;import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;public class StreamTest1 {public static void main(String[] args) {List<String> names = new ArrayList<>();Collections.addAll(names,"张三丰", "张无忌", "周芷若", "赵敏", "张强");System.out.println(names);//找出姓张且是三个字的名字,存到新集合中去List<String> list = new ArrayList<>();for (String name : names) {if (name.startsWith("张") && name.length() == 3){list.add(name);}}System.out.println(list);//使用Stream流解决问题List<String> list2 = names.stream().filter(s -> s.startsWith("张")).filter(a -> a.length() == 3).collect(Collectors.toList());System.out.println(list2);}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=4519:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\code\out\production\collection-map-stream-app com.xinbao.d8_stream.StreamTest1
[张三丰, 张无忌, 周芷若, 赵敏, 张强]
[张三丰, 张无忌]
[张三丰, 张无忌]
1.获取Stream流

package com.xinbao.d8_stream;import java.util.*;
import java.util.stream.Stream;public class StreamTest2 {public static void main(String[] args) {//1.如何获取List集合的Stream流List<String> names = new ArrayList<>();Collections.addAll(names,"张三丰", "张无忌", "周芷若", "赵敏", "张强");Stream<String> stream = names.stream();//2.如何获取Set集合的Stream流Set<String> set = new HashSet<>();Collections.addAll(set,"刘德华", "张曼玉", "张国荣", "刘嘉玲", "王祖贤");Stream<String> stream1 = set.stream();//alt + enterstream1.filter(s -> s.contains("张")).forEach(s -> System.out.println(s));//3.如何获取Map集合的Stream流Map<String,Double> map = new HashMap<>();map.put("古力娜扎", 167.5);map.put("迪丽热巴", 164.5);map.put("马尔扎哈", 187.7);map.put("哈尼克孜", 163.8);Set<String> keys = map.keySet();Stream<String> ks = keys.stream();Collection<Double> values = map.values();Stream<Double> vs = values.stream();Set<Map.Entry<String, Double>> entries = map.entrySet();Stream<Map.Entry<String, Double>> kvs = entries.stream();kvs.filter(s -> s.getKey().contains("哈")).forEach(s -> System.out.println(s.getKey() + "-->" + s.getValue()));//4.如何获取数组的Stream流String[] names2 = {"刘德华", "张曼玉", "张国荣", "刘嘉玲", "王祖贤"};Stream<String> stream2 = Arrays.stream(names2);Stream<String> names21 = Stream.of(names2);}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=39123:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\code\out\production\collection-map-stream-app com.xinbao.d8_stream.StreamTest2
张国荣
张曼玉
马尔扎哈-->187.7
哈尼克孜-->163.8
2.Stream流常见的中间方法

package com.xinbao.d6_map_impl;import java.util.Objects;public class Student implements Comparable<Student>{private String name;private int age;private double height;//this o@Override
//    public int compareTo(Student o) {
//        return this.age - o.age;//年龄升序
//    }public int compareTo(Student o) {return o.age - this.age;}public Student() {}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Double.compare(student.height, height) == 0 && Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age, height);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}
}

package com.xinbao.d8_stream;import com.xinbao.d6_map_impl.Student;import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;public class StreamTest3 {public static void main(String[] args) {List<Double> scores = new ArrayList<>();Collections.addAll(scores,88.5,22.5,88.7,56.9,24.8,46.7,96.3);//需求1:找出成绩大于60的数据,排序输出scores.stream().filter(s -> s>60).sorted().forEach(s -> System.out.println(s));List<Student> students = new ArrayList<>();students.add(new Student("蜘蛛精", 25, 168.5));students.add(new Student("蜘蛛精", 25, 168.5));students.add(new Student("至尊宝", 23, 163.5));students.add(new Student("牛魔王", 28, 183.5));System.out.println(students);//需求2:找出年龄大于23小于30的学生,升序输出students.stream().filter(s -> s.getAge() > 23 && s.getAge() < 30).sorted((o1,o2) -> o1.getAge() - o2.getAge()).forEach(System.out::println);//需求3:取出身高最高的前三名学生,并输出System.out.println("-------------------------------------------------------------");students.stream().sorted((o1, o2) -> Double.compare(o2.getHeight(),o1.getHeight())).limit(3).forEach(System.out::println);//需求4:取出身高倒数的两名学生输出System.out.println("-------------------------------------------------------------");students.stream().sorted((o1,o2) -> Double.compare(o2.getHeight(),o1.getHeight())).skip(students.size() - 2).forEach(System.out::println);//需求5:找出身高超过168的学生名字,去重再输出System.out.println("--------------------------------------------------------------");students.stream().filter(s -> s.getHeight()>168).map(Student::getName)//.map(s->s.getName) 映射.distinct().forEach(System.out::println);//distinct去重复,自定义类型的对象(希望内容一样就认为重复,重写hashCode,equals)students.stream().filter(s -> s.getHeight()>168).distinct().forEach(System.out::println);Stream<String> ls = Stream.of("李四", "王五", "刘六六");Stream<String> zs = Stream.of("张三");Stream<String> concat = Stream.concat(ls, zs);concat.forEach(System.out::println);}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=26802:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\code\out\production\collection-map-stream-app com.xinbao.d8_stream.StreamTest3
88.5
88.7
96.3
[Student{name='蜘蛛精', age=25, height=168.5}, Student{name='蜘蛛精', age=25, height=168.5}, Student{name='至尊宝', age=23, height=163.5}, Student{name='牛魔王', age=28, height=183.5}]
Student{name='蜘蛛精', age=25, height=168.5}
Student{name='蜘蛛精', age=25, height=168.5}
Student{name='牛魔王', age=28, height=183.5}
-------------------------------------------------------------
Student{name='牛魔王', age=28, height=183.5}
Student{name='蜘蛛精', age=25, height=168.5}
Student{name='蜘蛛精', age=25, height=168.5}
-------------------------------------------------------------
Student{name='蜘蛛精', age=25, height=168.5}
Student{name='至尊宝', age=23, height=163.5}
--------------------------------------------------------------
蜘蛛精
牛魔王
Student{name='蜘蛛精', age=25, height=168.5}
Student{name='牛魔王', age=28, height=183.5}
李四
王五
刘六六
张三
3.Stream流常见的终结方法

package com.xinbao.d8_stream;import com.xinbao.d6_map_impl.Student;import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StreamTest4 {public static void main(String[] args) {List<Student> students = new ArrayList<>();Student s1 = new Student("蜘蛛精", 25, 168.5);Student s2 = new Student("蜘蛛精", 25, 168.5);Student s3 = new Student("至尊宝", 23, 163.5);Student s4 = new Student("牛魔王", 28, 183.5);Student s5 = new Student("狐狸精", 23, 161.5);Student s6 = new Student("白骨精", 25, 161.5);Collections.addAll(students, s1, s2, s3, s4, s5, s6);//需求1:计算出高于168的人数long count = students.stream().filter(s -> s.getHeight() > 168).count();System.out.println(count);//需求2:找出最高学生对象并输出Student max = students.stream().max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();System.out.println(max);Optional<Student> max1 = students.stream().max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()));System.out.println(max1);//需求3:找出最矮学生对象并输出Student min = students.stream().min((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();System.out.println(min);//需求4:找出高于165的学生对象,放到新集合中返回List<Student> collect = students.stream().filter(s -> s.getHeight() > 165).collect(Collectors.toList());System.out.println(collect);Set<Student> collect2 = students.stream().filter(s -> s.getHeight() > 165).collect(Collectors.toSet());System.out.println(collect2);//去重//流只能收集一次(类比迭代器)
//        Stream<Student> str = students.stream().filter(s -> s.getHeight() > 165);
//        List<Student> list = str.collect(Collectors.toList());
//        System.out.println(list);
//        Set<Student> set = str.collect(Collectors.toSet());//报错,流已经终结
//        System.out.println(set);//需求五:找出高于165的学生对象,并把对象的名字和身高,存入到一个Map集合返回Map<String,Double> map =students.stream().filter(s -> s.getHeight()>165)//不会自动去重,需要.distinct()去重.distinct().collect(Collectors.toMap(a -> a.getName(), a -> a.getHeight()));System.out.println(map);Object[] objects = students.stream().filter(s -> s.getHeight() > 165).toArray();System.out.println(Arrays.toString(objects));Student[] students1 = students.stream().filter(s -> s.getHeight() > 165).toArray(len -> new Student[len]);System.out.println(Arrays.toString(students1));}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=27234:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\code\out\production\collection-map-stream-app com.xinbao.d8_stream.StreamTest4
3
Student{name='牛魔王', age=28, height=183.5}
Optional[Student{name='牛魔王', age=28, height=183.5}]
Student{name='狐狸精', age=23, height=161.5}
[Student{name='蜘蛛精', age=25, height=168.5}, Student{name='蜘蛛精', age=25, height=168.5}, Student{name='牛魔王', age=28, height=183.5}]
[Student{name='牛魔王', age=28, height=183.5}, Student{name='蜘蛛精', age=25, height=168.5}]
{蜘蛛精=168.5, 牛魔王=183.5}
[Student{name='蜘蛛精', age=25, height=168.5}, Student{name='蜘蛛精', age=25, height=168.5}, Student{name='牛魔王', age=28, height=183.5}]
[Student{name='蜘蛛精', age=25, height=168.5}, Student{name='蜘蛛精', age=25, height=168.5}, Student{name='牛魔王', age=28, height=183.5}]进程已结束,退出代码为 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java开发-WebSocket

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信-浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并实现 双向数据传输。 使用 导入maven坐标 <dependency><groupId>org.springframework.bo…

基于V/F控制的三相逆变器MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 参考文献&#xff1a;张飞,刘亚,张玉杰.基于V/F控制的三相逆变器仿真模型的研究[J].自动化与仪器仪表,2015 关于V/F控制的论文非常多&#xff0c;随意下载&#xff01; 当分布式电源经过逆变器运行于孤岛模…

【计算机毕设案例推荐】高校学术研讨信息管理系统小程序SpringBoot+Vue+小程序

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 项目名 基于SpringBoot的高校学术研讨信息管理系统小程序 技术栈 SpringBoot小程序VueMySQLMaven 文…

UE4 材质实操记录

TexCoord的R通道是从左到右的递增量&#xff0c;G通道是从上到下的递增量&#xff0c;R通道减去0.5&#xff0c;那么左边就是【-0.5~0】区间&#xff0c;所以左边为全黑&#xff0c;Abs取绝对值&#xff0c;就达到一个两边向中间的一个递减的效果&#xff0c;G通道同理&#xf…

stm32外部时钟为12MHZ,修改代码适配

代码默认是8MHZ的&#xff0c;修改2个地方&#xff1a; 第一个地方是这个文件的这里&#xff1a; 第二个地方是找到这个函数&#xff1a; 修改第二个地方的这里&#xff1a;

javaEE -5(8000字详解多线程)

一&#xff1a;JUC(java.util.concurrent) 的常见类 1.1 ReentrantLock 可重入互斥锁. 和 synchronized 定位类似, 都是用来实现互斥效果, 保证线程安全&#xff0c;ReentrantLock 也是可重入锁. “Reentrant” 这个单词的原意就是 “可重入” ReentrantLock 的用法&#xf…

TypeScript学习 | 泛型

简介 泛型是指在定义函数、接口或类的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性 作用 可以保证类型安全的前提下&#xff0c;让函数、接口或类与多种类型一起工作&#xff0c;从而实现复用 基本使用 举个例子&#xff1a; 创…

T113-S3-buildroot文件系统tar解压缩gz文件

目录 前言 一、现象描述 二、解决方案 三、tar解压缩.gz文件 总结 前言 本文主要介绍全志T113-S3平台官方SDK&#xff0c;buildroot文件系统tar不支持.gz文件解压缩的问题以及如何配置buildroot文件系统解决该问题的方法介绍。 一、现象描述 在buildroot文件系统中&#xff…

二、可行性分析与需求分析

文章目录 概念考点练习题一、可行性分析与需求分析1.可行性分析的任务2.可行性研究3.甘特图4.数据流图5.数据字典数据字典的内容 6.需求分析7. 实体联系ER图8. 状态转换图 二、练习题 概念考点练习题 一、可行性分析与需求分析 1.可行性分析的任务 用最小的代价在尽可能短的时…

【德哥说库系列】-PostgreSQL跨版本升级

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

区块链外包开发需要注意的问题

在进行区块链外包开发时&#xff0c;有一些关键问题需要特别注意&#xff0c;以确保项目的成功和质量。以下是一些需要考虑的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.明确的需求和目标&…

【网络协议】聊聊TCP的三挥四握

上一篇我们说了网络其实是不稳定的&#xff0c;TCP和UDP其实是两个不同的对立者&#xff0c;所以TCP为了保证数据在网络中传输的可靠性&#xff0c;从丢包、乱序、重传、拥塞等场景有自己的一套打法。 TCP格式 源端口和目标端口是不可缺少的&#xff0c;用以区分到达发送给拿…

windows安装数据库MySQL

windows安装数据库MySQL 文章目录 windows安装数据库MySQL一、MySQL官网下载压缩包二、在D盘新建文件夹D:\MySQL&#xff0c;将下载的压缩包解压到该文件夹下三、配置环境变量四、通过命令行模式安装、启用、配置SQL服务 一、MySQL官网下载压缩包 下载地址&#xff1a;https:/…

APP逆向基础(APK流程)

APK的基本结构 Android体系结构和APK基本结构-CSDN博客 APK 打包流程 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )_adnroid 安装包优化,打指定资源_韩曙亮的博客-CSDN博客 APK安装流程

Go 实现插入排序算法及优化

插入排序 插入排序是一种简单的排序算法&#xff0c;以数组为例&#xff0c;我们可以把数组看成是多个数组组成。插入排序的基本思想是往前面已排好序的数组中插入一个元素&#xff0c;组成一个新的数组&#xff0c;此数组依然有序。光看文字可能不理解&#xff0c;让我们看看…

Power BI 傻瓜入门 9. 设计和部署数据模型

本章内容包含&#xff1a; 详细说明设计数据模型的技术要求Power BI Desktop中基本数据模型的设计将数据模型从Power BI Desktop发布到Power BI Services 在数据进入Power BI后对其进行操作既是一门艺术&#xff0c;也是一门科学。导入到任何应用程序中的数据不仅需要注意数据…

【论文阅读】(2023TPAMI)PCRLv2

目录 AbstractMethodMethodnsU-Net中的特征金字塔多尺度像素恢复多尺度特征比较从多剪切到下剪切训练目标 总结 Abstract 现有方法及其缺点&#xff1a;最近的SSL方法大多是对比学习方法&#xff0c;它的目标是通过比较不同图像视图来保留潜在表示中的不变合判别语义&#xff…

[AutoSar NVM] 存储架构

依AutoSAR及公开知识辛苦整理&#xff0c;禁止转载。 专栏 《深入浅出AutoSAR》&#xff0c; 全文 2900 字. 图片来源&#xff1a; 知乎 汽车的ECU内存中有很多不同类型的变量&#xff0c;这些变量包括了车辆各个系统和功能所需的数据。大部分变量在ECU掉电后就会丢失&#x…

深入探索Sharding JDBC:分库分表的利器

随着互联网应用的不断发展和用户量的不断增加&#xff0c;传统的数据库在应对高并发和大数据量的场景下面临着巨大的挑战。为了解决这一问题&#xff0c;分库分表成为了一个非常流行的方案。分库分表主流的技术包括MyCat和Sharding JDBC。我们来通过一张图来了解这两者有什么区…

性能测试jmeter命令行运行+html测试报告解读

windows下打开jmeter的运行窗口&#xff0c;可以看到提示不要用GUI模式进行负载测试&#xff0c;如果要用负载测试&#xff0c;用cli模式&#xff0c;因为GUI模式运行jmeter比较消耗性能。 命令行模式 windows下找到jemeter所在文件夹&#xff0c;打开cmd输入命令。 jmeter -n…