您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何短路减少流?

如何短路减少流?

我怀疑您想要这种构造。

// 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 <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);
}

在这里您可以开始看到短路代码

其他 2022/1/1 18:15:11 有395人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶