在Java中,Stream流不支持i++或其他增量操作,因为Stream流是不可变的,一旦创建了Stream,就不能改变其内容。如果你尝试在Stream操作中使用i++,你就会得到一个编译错误。
例如,以下代码会导致编译错误:
int[] numbers = {1, 2, 3, 4, 5};
int i = 0;
Stream.of(numbers).forEach(n -> System.out.println(i++));
错误信息可能是:
Variable 'i' is accessed from within inner class, needs to be final or effectively final
解决这个问题的方法是使用IntStream.range来创建一个范围的流,并在需要时对每个元素进行操作:
IntStream.range(0, numbers.length)
.forEach(i -> System.out.println(numbers[i]));
或者,如果你需要对流中的元素执行某种操作时递增一个变量,你可以在操作内部声明一个局部变量并递增它:
AtomicInteger i = new AtomicInteger(0);
Stream.of(numbers).forEach(n - > {
System.out.println(i.getAndIncrement());
});
在这个例子中,我们使用了AtomicInteger,它是一个提供原子操作的Integer类。这个类有一个getAndIncrement方法,它将当前值递增1,并返回递增前的值。