java - 我可以在使用 Iterable.forEach(Consumer) 迭代元素时更改元素吗?

标签 java foreach iterable

我可以在使用 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/

相关文章:

php - 如何为数据库中的foreach数据添加索引?

javascript - Javascript (Node.js) 中的 For-In 循环意外地遍历数组索引而不是元素

java - Java 二维数组的迭代器和可迭代对象

string - 禁止将字符串处理为可迭代的

javascript - 在 ES6 中, 'generator' 实际上如何在 V8 引擎内暂停?

Java如何将从sdcard文件读取的文本拆分为不同的数组

java - Sun PKCS11 库 C_Encrypt 和 C_Decrypt 更改

java - 在 hibernate 中拆分字符串

Java - 获取扩展器(子)属性

c++ - std::string 和字符串文字之间的不一致