forEach不修改java(8)集合

假设我有一个整数列表,我在列表中使用Java 8 forEach方法将其值加倍。 说我有以下代码:

List l = Arrays.asList(2,3,6,1,9); l.forEach(p->p*=2); 

至于每个方法采取消费者并称其接受方法。 我在运行上面的代码后打印列表,原始列表不会改变。

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

谢谢你的推荐

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

forEach的javadoc说:

default void forEach(Consumer action)

…..默认实现的行为如下:

  for (T t : this) action.accept(t); 

如你看到的:

  • actionConsumer ; 即它不会产生价值。
  • 语义不允许更新this集合。

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

 List l = Arrays.asList(2,3,6,1,9); l.replaceAll(p->p*2); 

尝试使用forEach map来改变原始List

 List list = Arrays.asList(2,3,6,1,9); list=list.stream().map(p -> p * 2).collect(Collectors.toList()); System.out.println(list);