首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java8变量在for循环中

Java8变量在for循环中
EN

Stack Overflow用户
提问于 2020-01-07 17:08:30
回答 1查看 212关注 0票数 1
代码语言:javascript
复制
int sum = a;
int pow = 1;

for (int i = 0; i < n ; i++) {
    sum += b*pow;
    System.out.print(sum+" ");
    pow *= 2;
}

在Java-8中,在使用Stream时给出了pow变量的错误,该变量应该是最终

EN

回答 1

Stack Overflow用户

发布于 2020-01-07 20:23:23

您可以使用IntStream使用生成的流,并以相同的方式处理数字。注意,Math::pow返回Double,因此管道将产生DoubleStream

代码语言:javascript
复制
IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce(Double::sum);

唯一的缺点是在减少的过程中没有可用的消费者,因此您必须稍微修改一下:

代码语言:javascript
复制
IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce((left, right) -> {
    double s = left + right;
    System.out.println(s);
    return s;
});

要回答这个问题:

在java8中,在使用流时,给出对sum和pow变量的错误,该变量应该是最终变量。

其中一个effectively-final,条件是,lambda表达式中使用的变量必须是最终的,因此您在for-循环中使用的可变操作是不允许的,必须用流的映射特性来替换。这个问题在http://ilkinulas.github.io上得到了很好的解释。

记住,不能像使用for-循环那样使用java流

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59633013

复制
相关文章

相似问题

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