java中是否有最简单的reduce/fold方法?

2023-12-27

我知道的其他技术(.Net、JS)包含最简单的折叠/归约操作:

TResult reduce(TResult result, (TResult prevResult, TValue value) -> TResult)

我发现的一种方法要求 TValue 和 TResult 为同一类型。 另一种需要提供结合 2 个 TResult 的 BinaryOperation。 这些限制都不符合我的背景。 现在我最终得到了这样的代码:

Accumulator acc = someInitialValue;
for(Element element: list) {
    accumulator = reducer(accumulator, element);
}

但我相信基本方法应该包含在流 API 中。

我也找过收藏家,但没有发现任何有用的东西。


您正在寻找的是 Java 8 中添加的 Java Stream 框架。

The Stream https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html班级有3个reduce方法:

  • Optional<T> reduce(BinaryOperator<T> accumulator) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#reduce-java.util.function.BinaryOperator-
  • T reduce(T identity, BinaryOperator<T> accumulator) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#reduce-T-java.util.function.BinaryOperator-
  • <U> U reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#reduce-U-java.util.function.BiFunction-java.util.function.BinaryOperator-

第二reduce方法与您的示例匹配,但需要相同的结果类型。对于不同的结果类型,需要使用第三种reduce方法,这需要额外的combiner方法,因为它需要支持并行处理。


它还拥有 2collect方法:

  • <R,A> R collect(Collector<? super T,A,R> collector) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#collect-java.util.stream.Collector-
  • <R> R collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#collect-java.util.function.Supplier-java.util.function.BiConsumer-java.util.function.BiConsumer-

首先collect方法是最常用的一种,与Collectors https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html工厂类。

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

java中是否有最简单的reduce/fold方法? 的相关文章

随机推荐

  • 将jquery mobile中的所有点击事件替换为tap以加快速度

    我使用phonegap 和jquery mobile 开发移动应用程序 我使用数据角色等创建了布局 在这个应用程序中 我有很多如下所示的按钮可以转到不同的页面 我没有专门将点击事件绑定到这些按钮 它们只是使用 href 来实现魔法 a hr
  • 如何创建 IPC(进程间通信)C 程序来创建两个子进程

    我想创建一个 IPC c 程序来创建一个父进程和两个子进程 我的代码是 include
  • Spark代码组织和最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 因此 在面向对象的世界中度过了很多年 始终考虑到代码重用 设计模式和最佳实践 我发现自己在 Spark 世界中的代码组织和代码重用方面有些挣扎
  • NSTableView 行中的垂直对齐文本

    我对 NSTableView 有一个小问题 当我增加表中一行的高度时 其中的文本在行顶部对齐 但我想将其垂直居中对齐 谁能建议我有什么方法可以做到这一点 Thanks Miraaj 这是一个简单的代码解决方案 显示了可用于居中对齐 Text
  • Spark 广播变量 Map 给出 null 值

    我正在使用 java8 和 Spark v2 4 1 我正在尝试使用广播变量Map查找使用如下所示 输入数据 code1 code2 code3 1 7 5 2 7 4 3 7 3 4 7 2 5 7 1 预期输出 code1 code2
  • SystemC 中的增量周期和增量通知是什么?

    在SystemC中 有一种通知叫做delta通知 可以通过以下两种方法调用 event notify SC ZERO TIME or event notify 0 SC NS 它定义在增量通知调用中 对事件敏感的进程将在下一个增量周期的评估
  • 正则表达式以避免给定的一组子字符串[重复]

    这个问题在这里已经有答案了 我正在寻找一个可以匹配不包含给定子字符串集的所有内容的单个正则表达式 例如 正则表达式将匹配不包含子字符串 abc def ghi 的所有内容 在此示例中 正则表达式将匹配 student apple 和 mar
  • Django:将 CharField 转换为 TextField 且数据完好无损

    有没有办法将 CharField 更改为 TextField 并保持此列中的数据完好无损 现在我有以下内容 class TestLog models Model failed reqs models CharField max length
  • MongoDB 聚合 PHP,按小时分组

    我有以下格式的文档 id ObjectId 12e123123123123123 client id 12345667889 resource test test version v2 ts new Date Wed 02 Jan 2013
  • 异常处理策略——重用异常代码

    我正在开发一个应用程序 其过程如下所示 UI gt backend process gt result to UI 在我的Java代码中 我使用try catch处理异常 但是在代码中我有很多重复的异常 可能会在不同的类中抛出相同的异常 这
  • 为什么我的 JQL 查询返回的结果与等效的 CriteriaBuilder 查询不同?

    我正在使用 Dropwizard Hibernate 但我的测试遇到问题 我已经尽可能简化了这个例子 我创建一个Foo 更新它 然后尝试获取它 使用原始查询可以获得正确的结果 但等效的 CriteriaBuilder 查询无法捕获更新 我究
  • 如何求两个向量的和?

    我从三个带有 x 和 y 值的点开始 我真正想要的是实际向量的位置 查看提供的图像 你能帮助我吗 我尝试了一些 atan2 和平行四边形 但不幸的是没有成功 再次 我会提醒我可能会遗漏一些东西 但我think这是非常简单的向量加法 let
  • 如何对 WPF ListView 中的项目进行分组

    我有一个ListView我想将结果分组 但是我找到的示例不起作用 如何对结果进行分组 我想分组Status自定义对象的属性 这就是我所拥有的
  • Silverlight 2 拖放教程

    我想知道人们是否可以建议最好的教程 引导我使用 MS Silverlight V2 完成拖放和控件碰撞检测等的最佳方法 我已经做了杰西自由教程 http silverlight net learn tutorials aspx在 Silve
  • 打印其中包含 php 变量的字符串

    对于你们来说 我想这会很容易 div class vote pct style width 1px 我希望变量为 width 并使其末尾有 px 如果我加一个空格 它就不起作用 如果我将它们放在一起 它会将其视为一个大变量名 我可以向某人询
  • WebSocket 和普通套接字通信有什么区别?

    根据维基百科 http en wikipedia org wiki WebSocket HTTP 和 WebSocket 之间的唯一关系是一个额外的握手形式Upgrade HTTP request 之后 浏览器和 HTTP 服务器似乎将仅通
  • 在 C++ 中,我需要在关闭程序之前释放内存吗[重复]

    这个问题在这里已经有答案了 可能的重复 不释放内存是否可以接受 https stackoverflow com questions 496487 is it acceptable not to deallocate memory 这是一个一
  • Robolectric 测试需要等待线程上的某些内容

    我的班级是这样做的 public void doThing Doer doer new Doer Thread thread new Thread doer thread start Doer 类是一个内部类 private class D
  • 名称无效的表单控件...不可聚焦

    name additional here about other field 的无效表单控件不可聚焦 此代码适用于具有四个下拉列表的选择字段 需要几个选项 additional here about other field和 additio
  • java中是否有最简单的reduce/fold方法?

    我知道的其他技术 Net JS 包含最简单的折叠 归约操作 TResult reduce TResult result TResult prevResult TValue value gt TResult 我发现的一种方法要求 TValue