首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >forEach不修改java(8)集合

forEach不修改java(8)集合
EN

Stack Overflow用户
提问于 2014-05-25 13:20:26
回答 3查看 19.5K关注 0票数 17

假设我有一个整数列表,并且在列表上使用Java8 forEach方法将其值加倍。假设我有以下代码:

代码语言:javascript
复制
List<Integer> l = Arrays.asList(2,3,6,1,9);
l.forEach(p->p*=2);

作为forEach方法,接受消费者并调用它接受方法。在运行上面的代码后,我打印了列表,原始列表没有改变。

据我所知,Stream不会改变源代码,但在这里我只对每个元素调用accept方法……

提前感谢你

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-25 13:40:19

forEach不改变列表的原因归结为规范:

forEach的javadoc说:

default void forEach(Consumer<? super T> action)

.默认实现的行为方式如下所示:

对于(T t: this) action.accept(t);

如你所见:

  • action是一个Consumer;即它不生成值。
  • 语义不允许更新this集合。
票数 19
EN

Stack Overflow用户

发布于 2014-05-25 15:55:38

forEach方法只迭代列表中的元素而不更改它们,如果您想要更改元素,可以使用replaceAll方法

代码语言:javascript
复制
List<Integer> l = Arrays.asList(2,3,6,1,9);
l.replaceAll(p->p*2);
票数 32
EN

Stack Overflow用户

发布于 2014-05-25 13:25:00

尝试使用forEachmap实例来更改原始List

代码语言:javascript
复制
List<Integer> list = Arrays.asList(2,3,6,1,9);
list=list.stream().map(p -> p * 2).collect(Collectors.toList());
System.out.println(list);
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23852286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档