Stream 流
什么是流
从支持数据处理操作的源生成的元素序列
流与集合的区别
时间和空间
从流和集合的定位来看,集合面向的是存储,而流面向的是计算,比如说要构建一个质数集合,那理论上来说是构建不出来的,因为质数是无穷大的,不可穷举,而构建一个质数流是可行的,因为只要在使用的时候实时计算出这个质数就可以了,从这个角度来说,本质上说还是时间和空间的区别
只能遍历一次
集合可以遍历多次,而流是一个空间上的概念,再次遍历会出现异常
外部迭代和内部迭代
两者的处理方式很直观。集合使用foreach外部迭代,而流是内部迭代的方式。也就是流帮你处理了。
流的组成
流的组成
流操作分类
如何理解?比如有状态操作,dictinct 去重,一定是等到所有数据就位后,在所有数据的基础上进行去重,而像 filter 只要对单个的数据(对象)进行操作就好了,并不需要等所有数据;短路操作,比如 findFirst,只要找到第一个元素直接返回结果,不管后面还有多少元素,而像 foreach 循环,每个数据都要执行一次,非短路对吧。
流的使用
flatMap 使用:将多维嵌套列表转换为单维列表,或者将多个列表合成一个列表
Stream 流的构建
预定义收集器
collect(Collectors.toList)、collect(Collectors.toSet)、collect(Collectors.toMap) 这些不说了,更多的功能请看Collectors 类
版权声明: 本文为 InfoQ 作者【HeGuang】的原创文章。
原文链接:【http://xie.infoq.cn/article/9f52b140ea1e01c0ab68c0571】。未经作者许可,禁止转载。
评论