我怀疑你想要这种类型的结构.
// stop when any element evaluates to true
boolean any = stream.anyMatch(t -> t);
你可以仔细检查一下
Stream.of(1,2,3,4).peek(System.out::println).anyMatch(i -> i == 2);
版画
1
2
对于一个平行的例子
AtomicInteger count = new AtomicInteger();
IntStream.range(0,1000).parallel().peek(t -> count.incrementAndGet()).anyMatch(i -> i == 2);
System.out.println("count: " + count);
打印一个数字
count: 223
确切的数字有所不同.
对于referencePipeline,anyMatch调用
@Override
public final boolean anyMatch(Predicate super P_OUT> predicate) {
return evaluate(MatchOps.makeRef(predicate,MatchOps.MatchKind.ANY));
}
这叫做
public static TerminalOp makeRef(Predicate super T> predicate,MatchKind matchKind) {
Objects.requireNonNull(predicate);
Objects.requireNonNull(matchKind);
class MatchSink extends BooleanTerminalSink {
MatchSink() {
super(matchKind);
}
@Override
public void accept(T t) {
if (!stop && predicate.test(t) == matchKind.stopOnPredicateMatches) {
stop = true;
value = matchKind.shortCircuitResult;
}
}
}
return new MatchOp<>(StreamShape.REFERENCE,matchKind,MatchSink::new);
}
在那里你可以看到短路代码.