1.概述
Stream流是Java 8中提出的一个新特性,它结合了Lambda表达式,提供了一种处理集合和数组的方式。Stream流可以让我们以一种更加简洁、高效的方式来处理数据,从而简化对于集合,数组的操作
如同标题一样,Stream流可以像流水线一样对数据进行过滤,转换,去重,打印等一系列操作
如图:若我要对集合中的数据进行去重
我们可以利用冒泡去除匹配到的重复元素
加上打印语句我们需要10行代码
那我们使用Stream流就可以只用1行代码就完成了操作
除了Arrays和Collections,你有兴趣学Stream流吗
2.Stream流的使用步骤
⑴首先要先得到一条Stream流,把数据放上去
①单列集合 获取Stream流
直接使用单列集合中的静态方法stream
②双列集合 获取Stream流
先将双列集合转换为单列集合,在利用静态方法stream获取
③数组 获取Stream流
利用数组的工具类Arrays中的静态方法stream
④零散的数据 获取Stream流
直接利用Stram接口中的静态方法of获取
⑵使用Stream流的中间方法对数据进行处理
①Stream流的细节
Ⅰ.中间方法返回新的Stream流,原来的Stram流只能使用一次
如图:我创建流1并使用完成,然后想要再次使用流1,运行程序报错
Ⅱ.修改Stream流中的数据,原来集合或数组中的数据不会发生改变
②filter 过滤数据
如图:首先要获取流,再实现Predicate接口并重写里面的test方法
③limit获取前几个元素 skip跳过前几个元素
如图:想要获取或跳过元素,就在方法中填写元素个数即可
④distinct 去重元素
注:底层依赖hashCode和equals方法,因此若要去除自定义对象时,要在JavaBean类中重写方法
⑤concat 合并两个流
利用Stream中的静态方法concat,方法返回值类型为Stram
⑥map 转换流中的数据
如图:获取流,再继承Function并重写apply方法
⑦sorted 排序流中的数据
若流中的是基本数据类型,则要转换为对应的包装类,方法的细节与sort一样
⑶使用Stream流的终结方法对数据进行处理
终结方法运行完毕就会关流,下面就不能再次使用该流
①forEach遍历元素
如图:获取流,调用forEach实现Consumer 接口并重写accept方法
②toArray 收集数据到数组中
如图:在toArray中填写要转换的数组类型,实现IntFunction接口并重写apply方法
③collect 收集数据到集合
Ⅰ.收集数据到单列集合List
我们可以在collect中传递参数Collections.toList
注: List集合中可以存在重复数据
Ⅱ.收集数据到Set集合
我们可以在collect中传递参数Collections.toSet
注: Set集合中不能存在重复数据,若有重复数据,会自动去重
Ⅲ.收集数据到Map集合
我们同样在collect中传递参数Collections. toMap(K, V),其中我们要在toMap分别填写键的规则和值的规则
注:转换位Map集合时的键不能有重复,否则程序会报错!!!