for循环中的Java8变量

问题描述 投票:0回答:1
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给出了sumpow变量的错误,该变量应为final

java for-loop java-8 java-stream
1个回答
0
投票

您可以使用IntStream使用生成的流,并以相同的方式处理数字。请注意,IntStream返回Math::pow,因此流水线结果为Math::pow

Double

唯一的缺点是在还原过程中没有可用的消费者,因此您必须对其进行一些修改:

DoubleStream

要回答此问题:

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

DoubleStream条件之一是在lambda表达式中使用的变量必须为finalvalid-final,因此,不允许在for循环中使用可变操作,并具有将被Streams的映射功能取代。在IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce(Double::sum); 中很好地解释了此问题。

© www.soinside.com 2019 - 2024. All rights reserved.