谁能指出我正确的方向,因为我无法理解这个问题。
我正在执行以下方法。
private static void reduce_parallelStream() {
List<String> vals = Arrays.asList("a", "b");
List<String> join = vals.parallelStream().reduce(new ArrayList<String>(),
(List<String> l, String v) -> {
l.add(v);
return l;
}, (a, b) -> {
a.addAll(b);
return a;
}
);
System.out.println(join);
}
它打印
[空,a,空,a]
我不明白为什么它在结果列表中放置两个空值。我预计答案是
[一、二]
因为它是并行流,所以要减少的第一个参数
新的数组列表()
对于每个输入值 a 和 b 可能会被调用两次。
然后,累加器函数可能会被调用两次,因为它是一个并行流,并在每次调用中传递每个输入“a 和 b”以及种子值提供的列表。因此,a 被添加到列表 1,b 被添加到列表 2(反之亦然)。之后组合器将组合两个列表,但它不会发生。
有趣的是,如果我在累加器中放置一条打印语句来打印输入的值,则输出会发生变化。所以以下
private static void reduce_parallelStream() {
List<String> vals = Arrays.asList("a", "b");
List<String> join = vals.parallelStream().reduce(new ArrayList<String>(),
(List<String> l, String v) -> {
System.out.printf("l is %s", l);
l.add(v);
System.out.printf("l is %s", l);
return l;
}, (a, b) -> {
a.addAll(b);
return a;
}
);
System.out.println(join);
}
结果是这个输出
l 是 []l 是 [b]l 是 [b, a]l 是 [b, a] [b, a, b, a]
谁能解释一下。
蝴蝶刀刀
HUX布斯
RISEBY
相关分类