假设我有一个整数列表,并且在列表上使用Java8 forEach方法将其值加倍。假设我有以下代码:
List<Integer> l = Arrays.asList(2,3,6,1,9);
l.forEach(p->p*=2);作为forEach方法,接受消费者并调用它接受方法。在运行上面的代码后,我打印了列表,原始列表没有改变。
据我所知,Stream不会改变源代码,但在这里我只对每个元素调用accept方法……
提前感谢你
发布于 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集合。发布于 2014-05-25 15:55:38
forEach方法只迭代列表中的元素而不更改它们,如果您想要更改元素,可以使用replaceAll方法
List<Integer> l = Arrays.asList(2,3,6,1,9);
l.replaceAll(p->p*2);发布于 2014-05-25 13:25:00
尝试使用forEach的map实例来更改原始List。
List<Integer> list = Arrays.asList(2,3,6,1,9);
list=list.stream().map(p -> p * 2).collect(Collectors.toList());
System.out.println(list);https://stackoverflow.com/questions/23852286
复制相似问题