Stream是Java8的一大亮点,是对容器对象功能的增强**
??中间操作(Intermediate Operations):中间操作会返回一个新的流,一个流可以后面跟随零个或多个中间操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后会返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历。而是在终端操作开始的时候才真正开始执行;中间操作包括
filter():过滤
map():映射
flatMap():
distinct():去重
sorted():排序
peek()
limit():限制条数
skip():跳过条数
??终端操作(Terminal Operations):是指返回最终的结果。一个流只能有一个terminal操作,当这个操作执行后,流就被使用了,无法再被操作。所以这必定是流的最后一个操作。Terminal操作的执行,才会真正开始流的遍历,并且会生成一个结果,或者一个 side effect;终端操作包括:
forEach()
forEachOrdered()
toArray()
reduce()
collect()
min()
max()
count()
anyMatch()
allMatch()
noneMatch()
findFirst()
findAny()
??流只遍历一次,是流的另一个特性。比如一个list,中间操作有filter,map,sort,流的执行并不是先变量所有的元素,经过filter操作,再遍历所有元素,进行map操作。而是一个元素生成流,经过filter操作,然后进行map操作,再进行sort操作,最后经过终端操作。如果终端操作还没有结束,再进入下一个元素的循环。
原文:https://www.cnblogs.com/yanghanwen/p/14249351.html