首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java 8 streams以函数式方式生成数组的连续和

使用Java 8 streams以函数式方式生成数组的连续和
EN

Stack Overflow用户
提问于 2017-08-22 05:30:12
回答 1查看 53关注 0票数 2

我有一个双精度数组,我想将从0..n开始连续的元素总和赋给另一个数组。例如:r[0] = sum(a[0..n]), r[1] = sum(a[1..n]), r[m] = sum(a[m..n]) where m <= n等。

这对于循环来说是微不足道的:

代码语言:javascript
复制
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,我可以获得类似如下的内容:

代码语言:javascript
复制
for (int i = 0; i < n; i++)
    r[i] = DoubleStreamEx.of(a).skip(i).sum();

我并不真正关心性能,这更像是一个学习streams的练习。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 05:39:26

代码语言:javascript
复制
double[] r = IntStream.range(0, n)
        .mapToDouble(m -> Arrays.stream(a, m, n).sum())
        .toArray();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45805804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档