Pan*_*een 4 java java-8 java-stream
我有一个List定义如下:
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
Run Code Online (Sandbox Code Playgroud)
如何在[2,3]
不创建新列表的情况下使用Java 8的Stream API 将List的每个元素增加一个(即以List结尾)?
Hol*_*ger 17
Stream
从中创建a 时List
,不允许List
从包文档Stream
的"非干涉"部分中指定的源修改源.不遵守此约束可能会导致ConcurrentModificationException
数据结构损坏,甚至更糟,而不会出现异常.
使用Java Stream直接操作列表的唯一解决方案是创建一个不迭代列表本身的Stream,即迭代索引之类的流
IntStream.range(0, list1.size()).forEach(ix -> list1.set(ix, list1.get(ix)+1));
Run Code Online (Sandbox Code Playgroud)
就像伊兰的回答一样
但是没有必要在Stream
这里使用.目标可以简单地实现
list1.replaceAll(i -> i + 1);
Run Code Online (Sandbox Code Playgroud)
这是Java 8中引入的一种新List
方法,也允许平滑地使用lambda表达式.除此之外,还有一个可能是众所周知的Iterable.forEach
,很好的Collection.removeIf
和就地List.sort
方法,用于命名其他不涉及Stream API的新Collection操作.此外,Map
界面有几个值得了解的新方法.
另请参阅官方文档中的" 在Java SE 8中利用Lambda表达式和流的新增和增强的API ".
归档时间: |
|
查看次数: |
2032 次 |
最近记录: |