在执行流操作java 8时更新集合

use*_*534 6 java java-8 java-stream

我有一些List对象正在从几个线程中定期更新.在更新时,我想使用流来过滤掉一些元素.

例如; 说我有定期更新的列表:

List<MyObject> myList
Run Code Online (Sandbox Code Playgroud)

现在在某个时间点我在该列表上使用流

List<MyObject> result =  
myList.stream().filter(myobj->myobjt.isValid()).collect(toList());
Run Code Online (Sandbox Code Playgroud)

鉴于我的列表是从几个线程更新的,这是否是线程安全的?

Thi*_*ilo 7

CopyOnWriteArrayListJavadoc声明如下:

"快照"样式迭代器方法在创建迭代器时使用对数组状态的引用.这个数组在迭代器的生命周期中永远不会改变,所以干扰是不可能的,并且保证迭代器不会抛出ConcurrentModificationException.自迭代器创建以来,迭代器不会反映列表的添加,删除或更改.

所以,是的,您的代码应该是线程安全的.该流将在启动后忽略列表中的所有添加项.