java8 stream流

记一次糟心的使用:

前奏:

首先stream流分为三个阶段:

  1.创建

  2.中间操作 :返回的还是流

  3.终止操作:

最重要的一点,如果你的代码里没有敲最后的终止操作,中间操作的代码不会执行,不会有结果的产生。这个叫惰性求值。

关于stream流有两个问题:

1.并行流和串行流?

并行流采用ForkJoinPool实现的,线程数默认是cpu的数量

2.中间操作:

无状态操作和有状态操作:

java8 stream流_第1张图片

2.flatMap 和map?

java8 stream流_第2张图片
插入一个来自网络的图片


java8 stream流_第3张图片

3.stream运行机制:

wuzhua

1.只要没有有状态操作,就采用链式调用机制,每一条数据都只迭代一次,有状态操作会阶段无状态,单独处理.

每一个中间操作返回一个新的流,流中有一个属性sourceStage指向同一个Head

head-->nextStage-nextStage------ null


java8 stream流_第4张图片

2.并行操作:有状态的中间操作不一定并行操作。

java8 stream流_第5张图片

3.parallel()/sequential() 中间操作,不过并没有创建新的流,只是修改Head的并行标志

使用:


java8 stream流_第6张图片

数据结果:


java8 stream流_第7张图片

使用2:

java8 stream流_第8张图片

产生结果:


java8 stream流_第9张图片

总结:

我在使用了还有问题,和lambda和方法的引用结合上,写的不顺手。原来是我lambda学的不到位,lambda学好了在用stream比较好。

char

你可能感兴趣的:(java8 stream流)