Ama*_*Dev 4 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);
Run Code Online (Sandbox Code Playgroud)
该行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
谢谢,阿马尔
它仅在流并行时被调用。在这种情况下,流值被分成两半(递归),每一半都减少为一个列表,然后两个列表必须组合在一起。
请注意,reduce 不应该改变作为参数接收的值(在这种情况下是列表)。它应该返回一个新值。这就是collect()在这种情况下可变减少(即)是更好的选择。
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |