我可以在使用 Iterable.forEach(Consumer) 迭代元素时更改元素吗?或者在 Consumer.accept(E) 中我只能读取底层 Iterable 的元素,但不能更改它们?
如果我可以更改它们,正确的语法是什么?
ArrayDeque d = new ArrayDeque<Integer>();
d.add(1);
d.add(2);
d.add(3);
d.add(4);
Consumer<Integer> cons = (e)->{e = e*10;}; // compiles!
d.forEach(cons);
System.out.println(d); // 1 2 3 4 not 10 20 30 40
最佳答案
您想要做的事情与:
for (Integer e : d) {
e = e * 10;
}
但是分配给 e 不会改变它在双端队列中的值。
要做你想做的事,就这样做。
d = d.stream().map(a -> a * 10).collect(
Collectors.toCollection(ArrayDeque::new));
System.out.println(d);
关于java - 我可以在使用 Iterable.forEach(Consumer) 迭代元素时更改元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55854426/