final R evaluate(TerminalOp<E_OUT, R> terminalOp) {
assert getOutputShape() == terminalOp.inputShape();
if (linkedOrConsumed)
throw new IllegalStateException(MSG_STREAM_LINKED);
linkedOrConsumed = true;
return isParallel()
-
? terminalOp.evaluateParallel(this, sourceSpliterator(terminalOp.getOpFlags())) //并行流执行点
- terminalOp.evaluateSequential(this, sourceSpliterator(terminalOp.getOpFlags()));
}
复制代码
ReduceOps.evaluateParallel()
方法是其实现之一
@Override
public <P_IN> R evaluateParallel(PipelineHelper helper,
Spliterator<P_IN> spliterator) {
return new ReduceTask<>(this, helper, spliterator).invoke().get();
}
复制代码
主要做了两件事:
-
创建一个ReduceTask任务
-
任务调用invoke()执行
创建的逻辑没有额外的操作,就是将三个参数赋值到实例变量中。
invoke()是Fo