路径:
1.从findFirst()开发
2.E:\java1.8\jdk\jre\lib\rt.jar!\java\util\stream\ReferencePipeline.class
@Override
public final Optional<P_OUT> findFirst() {
return evaluate(FindOps.makeRef(true));
}
3.E:\java1.8\jdk\jre\lib\rt.jar!\java\util\stream\AbstractPipeline.class
final <R> 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()));
}
4.E:\java1.8\jdk\jre\lib\rt.jar!\java\util\stream\FindOps.class
@Override
public <S> O evaluateSequential(PipelineHelper<T> helper,
Spliterator<S> spliterator) {
O result = helper.wrapAndCopyInto(sinkSupplier.get(), spliterator).get();
return result != null ? result : emptyValue;
}
5.E:\java1.8\jdk\jre\lib\rt.jar!\java\util\stream\AbstractPipeline.class
@Override
final <P_IN, S extends Sink<E_OUT>> S wrapAndCopyInto(S sink, Spliterator<P_IN>
spliterator) {
copyInto(wrapSink(Objects.requireNonNull(sink)), spliterator);
return sink;
}
//--------------------------
@Override
final <P_IN> void copyInto(Sink<P_IN> wrappedSink, Spliterator<P_IN> spliterator) {
Objects.requireNonNull(wrappedSink);
if (!StreamOpFlag.SHORT_CIRCUIT.isKnown(getStreamAndOpFlags())) {
wrappedSink.begin(spliterator.getExactSizeIfKnown());
spliterator.forEachRemaining(wrappedSink);
wrappedSink.end();
}
else {
copyIntoWithCancel(wrappedSink, spliterator);
}
}
6.E:\java1.8\jdk\jre\lib\rt.jar!\java\util\Spliterators.class
@Override
public boolean tryAdvance(Consumer<? super T> action) {
if (action == null)
throw new NullPointerException();
if (index >= 0 && index < fence) {
@SuppressWarnings("unchecked") T e = (T) array[index++];
action.accept(e);
return true;
}
return false;
}
7.E:\java1.8\jdk\jre\lib\rt.jar!\java\util\stream\FindOps.class
@Override
public void accept(T value) {
if (!hasValue) {
hasValue = true;
this.value = value;
}
}
源码:java8 stream findFirst()方法赋值
于 2022-01-21 18:11:02 首次发布