java - 如何让 `reduce` 将流中的值彼此相除?

标签 java java-stream reduce

我有一个整数流,流的来源是一个列表:[3, 27] .
做的时候list.stream.reduce(1, (a,b) -> a/b)) ,如何让reduce除以3/1 = 3然后27/3 = 9并返回9?

最佳答案

一不应该用reduce具有不是 associative 的累加器功能.这在 JDK documentation of the API 中得到了特别强调。以及。

The accumulator function must be an associative function.


你真的不需要依赖流来进行这种操作,事实上,流在持久化中间状态方面并不好(在这种情况下),所以一个简单的 for 循环解决方案应该适合你:
int reduce = 1;
for (Integer integer : List.of(3, 27)) {
    reduce = integer / reduce;
}
System.out.println(reduce);
要测试出于此目的使用流 API 的不一致之处,只需将代码更改为以下内容并注意输出!
Integer reduce = List.of(3, 7).parallelStream().reduce(1, (a, b) -> b / a);
System.out.println(reduce);

关于java - 如何让 `reduce` 将流中的值彼此相除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62989174/

相关文章:

javascript - 在 Javascript 中展平和合并对象数组

java - 发生 DB2 连接授权失败原因 : Security Mechanism not supported in Java

java - 从java中的xpath表达式中提取所有变量引用的最安全方法

Java 8 : Lambda expression with where condition

javascript - 使用javascript的reduce方法将对象数组转换为每年和每月

javascript - 使用 vanilla JS 删除 ES5 及以下版本数组中的重复数字的最快方法是什么?

java - 图像处理和比较Android应用程序

Java - 尝试从另一个类访问一个类时出错

arrays - 如何使用数组流处理整数数组的总和超过 int max value(2147483647)?

Java 8 Hibernate Streams 标准分组按删除类型?