高效 告别996,开启java高效编程之门 3-6流操作分类

1    重点

理解流程操作分类

常用的方法

2    Stream流操作分类:

2.1  流操作分类之中间操作(Intermediate):

无状态操作——filter/map/peek等
有状态操作——dictinct/sorted/limit等

2.2  流操作分类之终端操作(Termina1):
非短路操作——forEach/collect/count等
短路操作——anyMatch/findFirst/findAny等

2.3  有状态操作无状态操作区别:

无状态操作:

比如map或者filter会从输入流中获取每一个元素,并且在输出流中得到一个结果,这些操作没有内部状态.

有状态操作:

a  但是像reduce、sum、max这些操作都需要内部状态来累计计算结果;

b  有一些操作sort、distinct、limit、skip看上去和filter、map差不多,他们接收一个流,再生成一个流,但是区别在于排序和去重复项需要知道先前的历史。

比如排序就需要将所有元素放入缓存区后才能给输出流加入一个项目,这个操作对缓存的要求是无上限的,流有多大就需要多大的缓存才能进行运算。这些操作也是有状态操作

2.4  非短路操作短路操作区别:

非短路操作:

每一个数据都要执行,比如循环forEach,循环完意味着每一个元素都遍历过

短路操作:

未必所有数据都能执行到,满足条件后即停止执行。如:findFirst,只要找到第一个要素,就不再往下执行

3    Stream流操作分类具体方法:

猜你喜欢

转载自www.cnblogs.com/1446358788-qq/p/12677628.html