Stream的TerminalOp执行原理
Stream在执行intermediate(例如 map、filter)操作时,会形成referencePipeline 双向链表。
TermianlOp执行时遍历链表:
1 | for ( AbstractPipeline p=AbstractPipeline.this; p.depth > 0; p=p.previousStage) { |
执行StatelessOp 中Sink的OnWrapSink。
(通过Sink 中ChainedReference 翻转)
所以Stream中的元素是依次应用intermediate操作。并不是所有元素应用完第一个intermediate操作,在应用下一个。
PS:使用Stream时,首先会构建一个HEAD-源阶段(Stream()),然后经历StatelessOp-中间阶段(map、filter),最终通过TermianlOp(reduce等)
Stream的TerminalOp执行原理