Stream在执行intermediate(例如 map、filter)操作时,会形成referencePipeline 双向链表。
TermianlOp执行时遍历链表:
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等)











网友评论