我有一个双精度数组,我想将从0..n开始连续的元素总和赋给另一个数组。例如:r[0] = sum(a[0..n]), r[1] = sum(a[1..n]), r[m] = sum(a[m..n]) where m <= n等。
这对于循环来说是微不足道的:
int n = a.length;
for (int i = 0; i < n; i++) {
double sum = 0.;
for (int j = i; j < n; j++)
sum += a[j];
r[i] = sum;
}在Java 8 streams中,有没有一种巧妙的方法来以函数式的方式做到这一点?使用库StreamEx,我可以获得类似如下的内容:
for (int i = 0; i < n; i++)
r[i] = DoubleStreamEx.of(a).skip(i).sum();我并不真正关心性能,这更像是一个学习streams的练习。
发布于 2017-08-22 05:39:26
double[] r = IntStream.range(0, n)
.mapToDouble(m -> Arrays.stream(a, m, n).sum())
.toArray();https://stackoverflow.com/questions/45805804
复制相似问题