Stream流
Stream(流)是一个来自数据源的元素队列并支持聚合操作:
- 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而 是按需计算。
- 数据源 流的来源。 可以是集合,数组等。
- 聚合操作类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted 等。
Stream流操作的三个步骤:
- 创建Stream
一个数据源(如:集合、数组),获取一个流
2. 中间操作
一个中间操作链,对数据源的数据进行处理
3. 终止操作
一个终止操作,执行中间操作链,并产生结果
创建Stream步骤:
- 通过Collection系列集合提供的顺序流stream()或并行流parallelStream()
- 通过Arrays中的静态方法stream()获取数据流
- 通过Stream类中的静态方法of()
代码实例:
1 | arduino复制代码package com.ysh.review01_Stream; |
Stream的中间操作
筛选和切片
filter:过滤器
1 | typescript复制代码package com.ysh.review01_Stream; |
运行结果:
skip(n):指跳过Stream中存储的前n条数据(包含第n条数据),返回后n条数据,如果n大于Stream中所有元素的个数,则返回空;(Employee类如上)
1 | ini复制代码package com.ysh.review01_Stream; |
运行截图:
distinct:筛选重复的元素,通过流生产元素的hashCode()和equals去除重复元素;
1 | ini复制代码package com.ysh.review01_Stream; |
运行截图:
排序:
sorted(Comparable)–自然排序
1 | java复制代码package com.ysh.review01_Stream; |
sorted(Comparator)–定制排序
1 | ini复制代码package com.ysh.review01_Stream; |
Stream中的map和flatMap方法:
- 流中的每一个数据,当做map方法的参数(接口),接口中抽象方法的参数,进行制定操作,最终得到一个结果,最后所有的结果返回去成为一个流
- 流中的每一个数据当作参数,进行操作,得到的结果必须是一个流,最终会结合成一个流返回
1 | ini复制代码package com.ysh.review01_Stream; |
终止操作
查找与匹配
- allMatch:检查是否匹配所有元素;
- anyMatch:检查是否至少匹配一个元素;
- noneMatch:检查是否没有匹配所有元素;
- findFirst:返回第一个元素;
- findAny:返回当前流中的任意元素;
- count:返回流中元素的总个数;
- max:返回流中最大值;
- min:返回流中最小值;
代码实例:
1 | ini复制代码package com.ysh.review01_Stream; |
收集:
收集-将流转换为其他形式,接收一个Collertor接口的实现,用于给Stream中元素做 汇总的方法
- List:把流中所有元素收集到List中,使用.collect(Collectors.toList());
- Set:把流中所有元素收集到Set中,删除重复项,使用.collect(Collectors.toSet());
- Map:把流中所有元素收集到Map中,当出现相同的key时会抛异常,使用 .collect(Collectors.toMap());
- 使用collect方法求流中共有几条数据,使用.collect(Collectors.counting())
- 使用collect方法求平均数,使用.collect(Collectors.averagingInt();
- 使用collect方法求某个变量的总和,使用.collect(Collectors.summingDouble());
- 使用collect方法且某个变量中值的最大值,使用.collect(Collectors.maxBy());
代码实例:
1 | ini复制代码package com.ysh.review01_Stream.one; |
最后
感谢你看到这里,文章有什么不足还请指正,觉得文章对你有帮助的话记得给我点个赞!
本文转载自: 掘金