Stream的TerminalOp执行原理

Stream在执行intermediate(例如 map、filter)操作时,会形成referencePipeline 双向链表。

TermianlOp执行时遍历链表:

1
2
3
for ( AbstractPipeline p=AbstractPipeline.this; p.depth > 0; p=p.previousStage) {
sink = p.opWrapSink(p.previousStage.combinedFlags, sink);
}

执行StatelessOp 中Sink的OnWrapSink。
(通过Sink 中ChainedReference 翻转)

所以Stream中的元素是依次应用intermediate操作。并不是所有元素应用完第一个intermediate操作,在应用下一个。

PS:使用Stream时,首先会构建一个HEAD-源阶段(Stream()),然后经历StatelessOp-中间阶段(map、filter),最终通过TermianlOp(reduce等)

作者

太阳当空赵先生

发布于

2019-05-29

更新于

2022-02-22

许可协议

评论