我想对一个数组做一个周期性总和,即一个索引模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