Java 8流减少方法返回相同的结果



java代码如下:

public static void main(String... aa) {
Stream<Integer> stream = Arrays.asList(1, 2, 3, 4, 5, 6).stream();
List<Integer> numbers = stream.reduce(
new ArrayList<Integer>(),
(List<Integer> l, Integer e) -> {
l.add(e);
return l;
},
(List<Integer> l1, List<Integer> l2) -> {
l1.addAll(l2);
return l1;
});
System.out.println("numbers" + numbers);
stream = Arrays.asList(1, 2, 3, 4, 5, 6).stream();
numbers = stream.reduce(new ArrayList<Integer>(),
(List<Integer> l, Integer e) -> {
l.add(e);
return l;
},
(List<Integer> l1, List<Integer> l2) -> {
return l1;
});
System.out.println("numbers" + numbers);
stream = Arrays.asList(1, 2, 3, 4, 5, 6).stream();
numbers = stream.reduce(new ArrayList<Integer>(),
(List<Integer> l, Integer e) -> {
l.add(e);
return l;
},
(List<Integer> l1, List<Integer> l2) -> {
return null;
});
System.out.println("numbers" + numbers);
}

给出如下结果:

number [1,2,3,4,5,6]

number [1,2,3,4,5,6]

number [1,2,3,4,5,6]

为什么结果是一样的?

我认为答案是:当流并行执行时,Java运行时将流分成多个子流。在这种情况下,我们需要使用一个函数将子流的结果合并为一个结果。这就是组合器的作用——在上面的代码片段中,它是Integer::sum方法引用。

所以正确的实现是第一个。

相关内容

  • 没有找到相关文章

最新更新