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变量的错误,该变量应该是最终。
发布于 2020-01-07 20:23:23
您可以使用IntStream使用生成的流,并以相同的方式处理数字。注意,Math::pow返回Double,因此管道将产生DoubleStream。
IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce(Double::sum);唯一的缺点是在减少的过程中没有可用的消费者,因此您必须稍微修改一下:
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流。
https://stackoverflow.com/questions/59633013
复制相似问题