记一次糟心的使用:
前奏:
首先stream流分为三个阶段:
1.创建
2.中间操作 :返回的还是流
3.终止操作:
最重要的一点,如果你的代码里没有敲最后的终止操作,中间操作的代码不会执行,不会有结果的产生。这个叫惰性求值。
关于stream流有两个问题:
1.并行流和串行流?
并行流采用ForkJoinPool实现的,线程数默认是cpu的数量
2.中间操作:
无状态操作和有状态操作:
2.flatMap 和map?
插入一个来自网络的图片3.stream运行机制:
wuzhua
1.只要没有有状态操作,就采用链式调用机制,每一条数据都只迭代一次,有状态操作会阶段无状态,单独处理.
每一个中间操作返回一个新的流,流中有一个属性sourceStage指向同一个Head
head-->nextStage-nextStage------ null
2.并行操作:有状态的中间操作不一定并行操作。
3.parallel()/sequential() 中间操作,不过并没有创建新的流,只是修改Head的并行标志
使用:
数据结果:
使用2:
产生结果:
总结:
我在使用了还有问题,和lambda和方法的引用结合上,写的不顺手。原来是我lambda学的不到位,lambda学好了在用stream比较好。
char
网友评论