如何在Stream上短路reduce?

2024-03-07

假设我有一个布尔值流,并且我正在编写的归约操作是||(或者)。我能否以一种方式编写它,以便在以下情况下放弃至少某些元素的评估:true遇到的值是?

我正在寻找一定程度的优化(也许如果它是并行流),不一定是完全优化,尽管后者会很棒。


我怀疑你想要这种类型的构造。

// stop when any element evaluates to true
boolean any = stream.anyMatch(t -> t);

你可以用 peek 检查一下

Stream.of(1, 2, 3, 4).peek(System.out::println).anyMatch(i -> i == 2);

prints

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

确切的数字各不相同。

作为参考管道,anyMatch calls

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

您可以在其中开始查看短路代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Stream上短路reduce? 的相关文章

随机推荐

  • 片段中的片段不刷新

    这是我的应用程序 带有片段 左侧有一个ListView 您可以在其中进行选择 如果您选择了右侧之一 则加载一个片段并将选项卡添加到 ActionBar 有这样的代码 import java util ArrayList import and
  • 实现多个用户角色

    我使用 state machine 取得了巨大的成功 并且喜欢它通过几行代码动态创建的类方法 但是 我不确定如何继续我正在创建的系统 我目前正在开发一个用户具有多种角色的系统 所以这并不像拥有一个状态来自的用户那么简单未证实 to 确认的然
  • php cURL 脚本在打印返回字符串时运行两次

    我有以下脚本 在远程 php 脚本中 一条记录被添加到数据库表中 当我在这个脚本中留下最后一行 print html 时 添加了 2 条记录 当我省略该行时 仅添加一条记录 但显然我没有任何输出 如果我将输出写入文件 则仅添加一条记录 输出
  • 无法加载类型“MediatR.ServiceFactory”

    我正在创建一个 Api 并且也在使用 mediatR 我已经创建了命令 查询 处理程序 但是当我尝试启动我的 Api 时 我在程序类中收到此错误消息 Could not load type MediatR ServiceFactory fr
  • Keras:一维输入的卷积层

    我无法为一维输入向量构建 CNN 输入值示例 df x iloc 300 Out 33 0 0 571429 1 1 000000 2 0 971429 3 0 800000 4 1 000000 5 0 142857 6 0 657143
  • 如何在 Cypress.io 中等待 WebSocket STOMP 消息

    在我的一项测试中 我想等待 WebSocket STOMP 消息 Cypress io 可以做到这一点吗 如果您要访问的 websocket 是由您的应用程序建立的 您可以遵循以下基本过程 获取参考WebSocket来自测试内部的实例 将事
  • jQuery插件回调函数参数

    我正在寻找一种更好的方法来访问 管理插件回调函数内的数据 我想做与 jQuery UI 相同的事情 用户界面示例 我想如何做到这一点 http api jqueryui com sortable http api jqueryui com
  • Perl 单行代码匹配所有出现的正则表达式

    对于类似这样的多行文本 views panes gw hero small site placement panel pane 1 1 a 0 a 10 s 14 override title i 1 s 19 override title
  • 使用“is”来命名布尔变量是不好的做法吗?

    现在命名以 is 开头的布尔值是不好的做法吗 我的经理认为 isAnything 已经过时且糟糕的做法 这是真的 myManager isLame correct incorrect 它在很多语言中都经常使用 但我不知道是否可以肯定地说它是
  • 团队中审批应用程序的 API - 是否有任何其他 API 可用于团队中新的审批应用程序?

    是否有任何 REST API 可用于团队中的新审批应用程序 在 Microsoft Teams 中发送 接收 管理和共享批准 您创建 管理和共享的所有系统的审批中心 能够在 Microsoft Teams 中直接查看并采取行动 快速完成工作
  • Python Matplotlib 动画帧重叠

    I am working on my orbit program and I have currently only animated the moon with a downward y velocity of 1023 The anim
  • 实体框架 - 对象上下文的关闭

    在使用 EFProfiler 顺便说一句 绝对是很棒的工具 对我们的一些实体框架应用程序进行分析后 似乎在大多数情况下 所有对象上下文都没有关闭 例如 在本地运行后 EF Profiler 告诉我有326对象上下文已打开 但只有 1 个被关
  • Keras 自定义损失函数不打印张量值

    我正在编写一个简单的损失函数 其中我必须将张量转换为 numpy 数组 这是必需的 我只是想打印张量的值 但收到此错误 张量 loss activation 4 loss Print 0 shape 224 224 2 数据类型 float
  • 如何通过 Mercurial 命令行获取所有关闭的分支?

    在命令行中 我可以通过以下方式获取没有闭合分支的所有头 hg heads 我还可以通过以下方式获取所有具有闭合分支的头 hg heads closed 但是 我如何通过命令行知道所有关闭的分支 RTM hg help revsets hg
  • Node.js:客户端模板与服务器端模板

    我已经尝试学习 Node js 几天了 但有一件事情我很困惑 JQuery 模板等客户端模板解决方案与 Jade for Node js 等服务器端解决方案之间有什么区别 各有什么用途 它们用在哪里 它们可以一起使用吗 如果有的话 有没有两
  • 使用“IN”命令将数组作为参数传递给 SQL 查询

    大家下午好 我有一个关于 SQL 查询的问题 是否可以使用数组作为使用 IN 命令的查询的参数 例如 int x 2 3 4 5 UPDATE table name set field 数据 WHERE field ID IN x 我问这个
  • Auth.net 捕获问题

    我在 auth net 上捕获交易的函数是 public function capture Varien Object payment amount if this gt isEnabled return parent capture pa
  • 带地址的 R 地理编码

    我有 32K 行地址 我必须为其查找长 纬度值 我正在使用找到的代码here http www storybench org geocode csv addresses r 我非常感谢这个人创造了它 但我有一个问题 我想对其进行编辑 以便如
  • pthread_create 的钩子

    是否有 在 glibc 2 5 及更新版本中 为 pthread create 定义钩子的方法 有很多二进制应用程序 我想编写一个动态库通过 LD PRELOAD 加载 我可以在 main 属性构造函数 的入口处添加钩子 但是如何强制我的代
  • 如何在Stream上短路reduce?

    假设我有一个布尔值流 并且我正在编写的归约操作是 或者 我能否以一种方式编写它 以便在以下情况下放弃至少某些元素的评估 true遇到的值是 我正在寻找一定程度的优化 也许如果它是并行流 不一定是完全优化 尽管后者会很棒 我怀疑你想要这种类型