博学谷IT学习技术支持
Stream思想
可以把Stream理解成工厂流水线。
几个瓶子从流水线的起始点开始出发,然后经过过滤掉坏瓶子,然后对好瓶子封开包装,最后收集到箱子里面去。
这个就是流式思想。
流主要有3个步骤
- 创建流
相当于把数据放到流水线上 - 对流的中间操作
可以在流水线上对数据进行多次操作 - 流的终结操作
然后中间操作完后,终结操作只能执行一次。
生成流的方式
单列集合创建流
通过集合的默认方法stream就可以创建流
双列集合创建流
有两种方式:
- 通过获取keyset来创建单列流,然后在通过key来访问vaule
- 通过获取entry对象来创建单列流,然后可以通过entry获取里面的key和vaule
数组创建流
通过Arrays.stream可以创建数组流
多个同种类型创建流
通过Stream.of方法就可以实现
Stream流的中间操作方法
- filter 用来过滤流的数据
- limit 用来提取指定数量的数据
- skip 用来跳过数据
- concat 用来连接两个流的数据
- disinct 用来去重数据,需要实现hashcode和equles
Stream的终结操作方法
- foreach 用来遍历每个元素
- count 用来统计元素个数
Stream的收集操作
流水线把东西处理完后,需要打包这个步骤。这个就相当于流的收集操作。
操作有3个:
- 收集成单列List集合
通过toCollector方法,然后传递Collector.toList() - 收集成双列集合
通过toCollector方法,然后传递Collector.toMap(),最终有两个参数需要实现。- 用来识别哪个是Key
- 用来识别哪个是Value
- 收集成单列Set集合
通过toCollector方法,然后传递Collector.toSet()
Stream案例
已知数组arr1中有如下元素{郭靖,杨康},arr2中有如下元素{黄蓉,穆念慈},使用Stream将二者合并到List集合
代码实现
String[] arr1={"郭靖","杨康"};
String[] arr2={"黄蓉","穆念慈"};
List<String> collect = Stream.concat(Arrays.stream(arr1),
Arrays.stream(arr2)).collect(Collectors.toList());
System.out.println(collect);
打印结果
[郭靖, 杨康, 黄蓉, 穆念慈]