Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for循环中的Java8变量 int sum=a; int-pow=1; 对于(int i=0;i_Java_For Loop_Java 8_Java Stream - Fatal编程技术网

for循环中的Java8变量 int sum=a; int-pow=1; 对于(int i=0;i

for循环中的Java8变量 int sum=a; int-pow=1; 对于(int i=0;i,java,for-loop,java-8,java-stream,Java,For Loop,Java 8,Java Stream,在Java-8中,关于使用流给出了sum和pow变量的错误,该变量应该是final您可以使用生成的流,并以相同的方式处理这些数字。请注意,返回的Double,因此管道将导致 唯一的缺点是在降价过程中没有消费者可用,因此您必须对其进行一些修改: IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce(Double::sum); 要回答这个问题: 在java8中,在使用流时给出sum和pow变量的错误,该变量应为最终

在Java-8中,关于使用
给出了sumpow变量的错误,该变量应该是final

您可以使用生成的流,并以相同的方式处理这些数字。请注意,返回的
Double
,因此管道将导致

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

IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce(Double::sum);
要回答这个问题:

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

其中一个条件是lambda表达式中使用的变量必须是finaleffective final,因此不允许在for循环中使用可变操作,必须用流的映射功能替换。这个问题在上一节中得到了很好的解释



请记住,不能使用与循环相同的方法。

可以使用生成的流,并以相同的方式处理数字。请注意,返回的
Double
,因此管道将导致

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

IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce(Double::sum);
要回答这个问题:

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

其中一个条件是lambda表达式中使用的变量必须是finaleffective final,因此不允许在for循环中使用可变操作,必须用流的映射功能替换。这个问题在上一节中得到了很好的解释



请记住,您不能使用与循环相同的方法。

您可以使用
原子整数
而不是常规的
int
来避免这个问题。@EdwinDalorzo:这是一个解决方法,也是一个数组技巧,但原则上是错误的。提供了处理此类操作的机制。您的
尝试是什么样子的?看到
AtomicInteger
会让读者想知道一个简单的管道是如何并发的,除了将循环转换为流之外,还会造成另一个不必要的性能损失。我强烈反对这种类型的滥用。您可以使用
AtomicInteger
而不是常规的
int
来避免这个问题。@EdwinDalorzo:这是一种变通方法,也是一种数组技巧,但从原则上讲是错误的。提供了处理此类操作的机制。您的
尝试是什么样子的?看到
AtomicInteger
会让读者想知道一个简单的管道是如何并发的,除了将循环转换为流之外,还会造成另一个不必要的性能损失。我强烈反对这种类型的滥用。
IntStream.range(0, n).mapToDouble(i -> b * Math.pow(2, i)).reduce((left, right) -> {
    double s = left + right;
    System.out.println(s);
    return s;
});