我正在使用流將字符串數組轉換爲hashmap。爲什麼paralel流可以提供不完整的元素列表
String[] arguments= new String[]{"-a","1","-b","2","-c","3","-d","4","-e","5"};
HashMap<String, String> params = new HashMap<>();
IntStream.iterate(0, i -> i + 2)
.limit(arguments.length/2)
.parallel()
.forEach(i -> params.put(arguments[i], arguments[i + 1]));
System.out.println(params.size());
這表明5,但有時4.
你能解釋一下,拜託,這可能是不同結果的原因是什麼?
* *爲什麼「我使用的是流**轉換字符串數組的HashMap **」?使用普通的'for'循環。它更快,更簡單,更清晰,而且很有效! – Andreas
第1步:學習解決沒有'forEach'的問題。第2步:認識到並行流並沒有爲這樣一個微不足道的任務付出代價(尤其是沒有並行不友好的'iterate(...).limit(...)'組合)。如果你想要一個有效的解決方案,你可以使用'HashMap params = IntStream.range(0,arguments.length/2).map(i - > i * 2).collect(HashMap :: new,( m,i) - > m.put(參數[i],參數[i + 1]),Map :: putAll);'這可以並行工作,但在並行處理中仍然沒有任何好處。 –
Holger