理解流程操做分类
缓存
经常使用的方法spa
2.1 流操做分类之中间操做(Intermediate):3d
无状态操做——filter/map/peek等
有状态操做——dictinct/sorted/limit等blog
2.2 流操做分类之终端操做(Termina1):
非短路操做——forEach/collect/count等
短路操做——anyMatch/findFirst/findAny等排序
2.3 有状态操做无状态操做区别:ip
无状态操做:it
好比map或者filter会从输入流中获取每个元素,而且在输出流中获得一个结果,这些操做没有内部状态.循环
有状态操做:终端
a 可是像reduce、sum、max这些操做都须要内部状态来累计计算结果;遍历
b 有一些操做sort、distinct、limit、skip看上去和filter、map差很少,他们接收一个流,再生成一个流,可是区别在于排序和去重复项须要知道先前的历史。
好比排序就须要将全部元素放入缓存区后才能给输出流加入一个项目,这个操做对缓存的要求是无上限的,流有多大就须要多大的缓存才能进行运算。这些操做也是有状态操做
2.4 非短路操做短路操做区别:
非短路操做:
每个数据都要执行,好比循环forEach,循环完意味着每个元素都遍历过
短路操做:
未必全部数据都能执行到,知足条件后即中止执行。如:findFirst,只要找到第一个要素,就再也不往下执行