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
给出了sum和pow变量的错误,该变量应为final。
您可以使用IntStream
使用生成的流,并以相同的方式处理数字。请注意,IntStream
返回Math::pow
,因此流水线结果为Math::pow
。
Double
唯一的缺点是在还原过程中没有可用的消费者,因此您必须对其进行一些修改:
DoubleStream
要回答此问题:
在使用流的java8中,给出sum和pow变量的错误,该变量应为最终变量。
DoubleStream
条件之一是在lambda表达式中使用的变量必须为final或valid-final,因此,不允许在for循环中使用可变操作,并具有将被Streams的映射功能取代。在IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce(Double::sum);
中很好地解释了此问题。