Java中是否有最简单的可能的reduce / fold方法?

时间:2019-05-30 18:53:27

标签: java java-8 java-stream

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

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

我发现一个方法要求TValue和TResult为同一类型。 另一个要求提供结合2个TResults的BinaryOperation。 这些约束都不符合我的情况。 现在,我最终得到如下代码:

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

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

我也寻找过收藏家,但没有发现任何帮助。

1 个答案:

答案 0 :(得分:4)

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

Stream类具有3个reduce方法:

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


它也有2个collect方法:

Collectors工厂类结合使用时,第一种collect方法是最常用的方法。