用于描述中间管道阶段或者管道源阶段的抽象基类。
继承 AbstractPipeline,实现 Stream
AbstractPipeline
继承 PipelineHelper,实现 BaseStream
文档说明
属性
构造方法
构造方法一:构造流管道的头
上游 pipeline 置 null,将带有数据源引用的 spliterator 赋给当前 pipeline,
将当前阶段标记为源阶段,配置操作属性,当前深度初始化为0,设置 串行/并行 标记
AbstractPipeline(Supplier<? extends Spliterator<?>> source, int sourceFlags, boolean parallel) { this.previousStage = null; this.sourceSupplier = source; this.sourceStage = this; this.sourceOrOpFlags = sourceFlags & StreamOpFlag.STREAM_MASK; // The following is an optimization of: // StreamOpFlag.combineOpFlags(sourceOrOpFlags, StreamOpFlag.INITIAL_OPS_VALUE); this.combinedFlags = (~(sourceOrOpFlags << 1)) & StreamOpFlag.INITIAL_OPS_VALUE; this.depth = 0; this.parallel = parallel; }
构造方法二:构造用于追加一个中间操作到一个既有的 pipeline 上
断言,若传入的上游 pipeline 已被链接过消费,则抛出异常;
将上游 pipeline 标记为已消费;将上游 pipeline 的下游指向当前 pipeline;将当前 pipeline 的上游指向上游 pipeline;
配置操作属性;深度 +1
AbstractPipeline(Spliterator<?> source, int sourceFlags, boolean parallel) { this.previousStage = null; this.sourceSpliterator = source; this.sourceStage = this; this.sourceOrOpFlags = sourceFlags & StreamOpFlag.STREAM_MASK; // The following is an optimization of: // StreamOpFlag.combineOpFlags(sourceOrOpFlags, StreamOpFlag.INITIAL_OPS_VALUE); this.combinedFlags = (~(sourceOrOpFlags << 1)) & StreamOpFlag.INITIAL_OPS_VALUE; this.depth = 0; this.parallel = parallel; }
ReferencePipeline.Head
表示 ReferencePipeline 的源阶段
继承了 ReferencePipeline(二者在大部分属性的设定上是类似的,但存在一些属性是不同的,比如说 Head 的 previousStage 是空的,而 ReferencePipeline 则存在 previousStage,等等)
构造方法
本质上是调用的是 AbstractPipeline 的构造方法一,
ReferencePipeline(Supplier<? extends Spliterator<?>> source, int sourceFlags, boolean parallel) { super(source, sourceFlags, parallel); }
ReferencePipeline(Spliterator<?> source, int sourceFlags, boolean parallel) { super(source, sourceFlags, parallel); }
ReferencePipeline.StatelessOp
一个基类,针对一个流的无状态的中间阶段,同样集成了 ReferencePipeline
构造方法
本质上调用的是 AbstractPipeline 的构造方法二
StatelessOp(AbstractPipeline<?, E_IN, ?> upstream, int opFlags) { super(upstream, opFlags); assert upstream.getOutputShape() == inputShape; }
原文:https://www.cnblogs.com/flying-snake/p/11531028.html