我想對一個數組做一個週期性總和,即一個索引模n上的和。Java 8流:陣列上的週期性總和
int size=100;
double[] doubleArr = new double[size];
for (int i = 0; i < size; i++){
doubleArr[i]=Math.random();
}
int n=2;
double[] results= new double[n];
for (int i = 0; i < doubleArr.length; i++) {
results[i % n] += doubleArr[i];
}
System.out.println(Arrays.toString(results));
此代碼有效,但由於我的數組非常龐大,我想要並行化操作。
Java 8流似乎是一個很好的解決方案。
double[] results2= new double[n];
IntStream.range(0, doubleArr.length).forEach(i -> results2[i % n] += doubleArr[i]);
System.out.println(Arrays.toString(results2));
我得到了同樣的結果。精細。
但是,如果我想並行化,它會失敗。
double[] results3= new double[n];
IntStream.range(0, doubleArr.length).parallel().forEach(i -> results3[i % n] += doubleArr[i]);
System.out.println(Arrays.toString(results3));
我明白這是因爲results3是可變的。
我想我應該在流操作中產生結果,有一個collect,但我不知道如何繼續。
它失敗,例外或如何?如果拋出異常,則發出異常,如果結果不是預期的結果和期望後的結果 –
「失敗」是什麼意思? – syntagma
@ REACHUS最終數組是從多個線程編輯的,這會給出不準確的結果 – Ferrybig