1 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
您的圖表不正確 - 您假設(shè)每個(gè)并行減少都以新的StringBuilder. 而不是每個(gè)并行縮減都從相同的標(biāo)識(shí)元素開(kāi)始- 使用相同的 StringBuilder(您創(chuàng)建并作為第一個(gè)參數(shù)傳遞給reduce方法的那個(gè))。
每個(gè)并行流都調(diào)用StringBuilder.append您傳遞給reduce方法的(一個(gè)也是唯一的)StringBuilder ,從而將當(dāng)前遇到的元素附加到它。
下一步是組合部分結(jié)果,同樣通過(guò)調(diào)用StringBuilder.append同一個(gè) StringBuilder,將 StringBuilder 內(nèi)容的副本附加到自身上。
要?jiǎng)?chuàng)建您繪制的圖表,您必須將 aSupplier<StringBuilder>作為第一個(gè)參數(shù)傳遞給 reduce 操作。
實(shí)際上,根據(jù) Holger 的評(píng)論,這在使用Mutable Reduction時(shí)是可能的。
為此,您無(wú)需調(diào)用 reduce 方法,而是調(diào)用該collect方法:
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);
添加回答
舉報(bào)