您的图表不正确 - 您假设每个并行减少都以新的开始StringBuilder
。相反,每个并行减少开始具有相同的单位元- 使用相同的 StringBuilder(您创建并作为第一个参数传递给reduce
方法)。
每个并行流调用StringBuilder.append
在您传递给的(唯一的)StringBuilder 上reduce
方法,从而将当前遇到的元素附加到它。
下一步是组合部分结果,也可以通过调用StringBuilder.append
在同一个 StringBuilder 上,将 StringBuilder 的内容副本附加到其自身上。
要创建您绘制的图表,您必须传递一个Supplier<StringBuilder>
作为归约操作的第一个参数。
实际上,根据 Holger 的评论,使用时这是可能的可变约简.
为此,您不调用reduce方法,而是调用collect
method:
List<String> list = Arrays.asList("1","2","3","4","5","6",
"7","8","9","10","11","12");
String result = list.parallelStream()
.collect(StringBuilder::new, StringBuilder::append,
StringBuilder::append).toString();
System.out.println(result);