
我怀疑您想要这种构造。
// stop when any element evaluates to trueboolean any = stream.anyMatch(t -> t);
你可以看一下
Stream.of(1, 2, 3, 4).peek(System.out::println).anyMatch(i -> i == 2);
版画
12
举个平行的例子
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调用
@Overridepublic final boolean anyMatch(Predicate<? super P_OUT> predicate) { return evaluate(MatchOps.makeRef(predicate, MatchOps.MatchKind.ANY));}叫这个
public static <T> TerminalOp<T, Boolean> makeRef(Predicate<? super T> predicate, MatchKind matchKind) { Objects.requireNonNull(predicate); Objects.requireNonNull(matchKind); class MatchSink extends BooleanTerminalSink<T> { 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);}在这里您可以开始看到短路代码。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)