Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!一 什么是 Stream 流式计算首先要知道 当今的大数据 无非就是两步操作 1 存储数据可以使用 Map Set 等集合框架或者是 MySQL 等数据库 2 计算数据则是交给 Stream 流来做 Java8 的

大家好,欢迎来到IT知识分享网。

了解和剖析

/题目 * 现在有5个用户,进行筛选 * 1、ID必须是偶数 * 2、年龄必须大于23岁 * 3、用户名转为大写字母 * 4、用户名字母倒着排序 * 5、只输出一个用户 */ public class Test01 { public static void main(String[] args) { User u1 = new User(1, "a", 21); User u2 = new User(2, "b", 28); User u3 = new User(3, "c", 25); User u4 = new User(4, "d", 56); User u5 = new User(5, "e", 25); //把这些对象存储进一个集合中 List<User> list = Arrays.asList(u1, u2, u3, u4, u5); //链式编程,计算交给Stream流,把集合转换成一个Stream流对象 list.stream().filter((u)->{return u.getId()%2 == 0;}) .filter((u)->{return u.getAge() > 23;}) .map((u)->{return u.getName().toUpperCase();}) //转大写 .sorted((uu1,uu2)->{return uu2.compareTo(uu1);}) //倒序 .limit(1) .forEach(System.out::println); } }

创建流

流的创建,分成了单列和双列类型,创建流的方式如下

//单列集合创建流 List<Map<String, Object>> birthdayData = null; Stream<Map<String, Object>> stream = birthdayData.stream(); //单列数组创建流(两种方法) Integer[] arr = {1,2,3}; Stream<Integer> stream1 = Arrays.stream(arr); Stream<Integer> stream2 = Stream.of(arr); //双列Map集合创建流(Map集合不能直接创建Stream流,需要先转换成单列集合) Map<Object, Object> hashMap = new HashMap<>(); hashMap.put("start_date", nowDateStr); hashMap.put("end_date", nowDateStr); hashMap.put("calendar_search", searchText); Set<Map.Entry<Object, Object>> entrySet = hashMap.entrySet(); Stream<Map.Entry<Object, Object>> mapStream = entrySet.stream();

中间操作

filter

map

 //初始化数据 CalendarFuzzyVo vo1 = new CalendarFuzzyVo(); CalendarFuzzyVo vo2 = new CalendarFuzzyVo(); CalendarFuzzyVo vo3 = new CalendarFuzzyVo(); List<CalendarFuzzyVo> list = new ArrayList<>(); list.add(vo1); list.add(vo2); list.add(vo3); list.stream() .map(new Function<CalendarFuzzyVo, String>() { @Override public String apply(CalendarFuzzyVo calendarFuzzyVo) { //拿到对象中的日程ID并返回 return calendarFuzzyVo.getSchedule_id(); } }) .forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } });

2、Lambda表达式方式(简化后)

 //初始化数据 CalendarFuzzyVo vo1 = new CalendarFuzzyVo(); CalendarFuzzyVo vo2 = new CalendarFuzzyVo(); CalendarFuzzyVo vo3 = new CalendarFuzzyVo(); List<CalendarFuzzyVo> list = new ArrayList<>(); list.add(vo1); list.add(vo2); list.add(vo3); list.stream() .map(calendarFuzzyVo -> calendarFuzzyVo.getSchedule_id()) .forEach(s -> System.out.println(s));

(二)计算Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

distinct

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

使用流来去重

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

sorted

二、实现原理

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

这个方法的方法体中只需要传入需要比较的属性,两个属性相减,如果为前面的大,就是正的;如果前面的小,就是负的;如果为0,则说明两个对象的年龄是相等的(注意:无需记忆该方法是升序还是降序,只需要根据需求调换减号两边参数的位置)

2、如果调用带参的sorted方法,直接在调该方法的时候,使用匿名内部类的方式进行重写compare方法

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

limit

三、示例

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

代码:

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

控制台:打印出1个元素

skip

flatMap

三、示例

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

peek

二、使用示例

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

终结操作

forEach

count

min&max

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

collect

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!
2、获取所有书名的Set集合
调用Collectors.toSet方法

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

4、根据单一字段分组

查找与匹配anyMatch

查找与匹配allMatch

二、示例

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

查找与匹配noneMatch

二、示例

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

查找与匹配findAny

这里需要注意的是,可能通过过滤的工作后,压根就不存在符合条件的作家对象,那么这个时候需要调用Optional的ifPresent方法,避免出现空指针的情况

查找与匹配findFirst

reduce

二、工作原理

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

其中identity就是我们可以通过方法参数传入的初始值,accumlator的apply具体进行什么计算就要看方法体中怎么写

该方法会把stream中的元素组合起来,可以传入一个初始值,他会按照我们的计算方式依次拿流中的元素和在初始化值的基础上进行计算,计算结果再和后面的元素计算    

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

需要注意的是,如果我们想求一个对象中Integer类型数据的和,那么首先需要通过map将流的泛型转换成Integer类型,才能调用reduce方法,赋予Integer类型的初始值(identity)

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

2、求最大值

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

3、求最小值

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

Java8新特性——Stream流式计算,详细Stream流介绍搭配常见的创建流、中间操作以及终结操作等,一篇文章帮你拿下!

至此,关于Stream中常见的操作介绍完毕,内容比较多,建议收藏反复学习,后续还会持续更新,敬请期待~~~

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/123049.html

(0)
上一篇 2025-10-12 07:33
下一篇 2025-10-12 08:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信