java - 为什么在 java-8 stream reduce 操作中不执行 combiner 函数?

标签 java java-8 java-stream

<分区>

我想了解流中的 reduce 方法是如何工作的。

Stream.of(1,2,3,4,5,6,7).reduce(new ArrayList<>(),
(List<Integer> l, Integer a) -> {l.add(a);return l;},
(List<Integer> l1, List<Integer> l2) -> {
System.out.println("l1 is" + l1 + "l2 is " + l2);
l1.addAll(l2);
return l1;
}).forEach(System.out::println);

System.out.println("l1 is" + l1 + "l2 is " + l2)永远不会被打印出来。 我可以理解 (List<Integer> l, Integer a) -> {l.add(a);return l;} 中发生了什么
有人能解释一下为什么没有打印出来吗? Java 文档说 function for combining two values, which must be compatible with the accumulator function

谢谢, 阿马尔

最佳答案

它仅在流并行时被调用。在那种情况下,流值被分成两半(递归),每一半都缩减为一个列表,然后必须将两个列表组合在一起。

请注意,缩减不应该改变作为参数接收的值(在本例中为列表)。它应该返回一个新值。这就是可变缩减(即 collect())在这种情况下是更好的选择。

关于java - 为什么在 java-8 stream reduce 操作中不执行 combiner 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44985943/

相关文章:

java - 为什么实现View.onClickListener会使我的应用程序崩溃?

java - Struts2 - 如何在不使用 struts.xml 的情况下重定向到操作?

java - 混合方法引用和泛型时出现 LambdaConversionException

java - 查找两个暗数组中给出的候选分数的最大分数或最大平均分数

用于存储过程的 Java 流

java - Hibernate Date Criteria 失败,但 HQL 有效

Java Applet 网络连接

java - 从 2 个列表中过滤并使用 java8 获取匹配的记录

带有自定义键的 Java 8 groupingby

Java 8,流查找重复元素