带有过滤器链接的ParallelStream



如果我使用parallelStream()而不是stream()filter链接是否会更改结果?

我尝试了几千条记录,在几次迭代中输出看起来是一致的。但由于这涉及到线程,(我找不到足够的相关材料来谈论这种组合(我想加倍确保并行流不会以任何方式影响过滤器链接的输出。示例代码:

List<Element> list = myList.parallelStream()
.filter(element -> element.getId() > 10)
.filter(element -> element.getName().contains("something"))
.collect(Collectors.toList());

简短回答:

所记录的filter操作期望将一个非干扰和无状态谓词应用于每个元素,以确定是否应将其作为新流的一部分包括在内。

你应该考虑的几个方面是-

  1. 并发集合除外(在现有代码中选择什么作为myList(-

对于大多数数据源,防止干扰意味着确保在流的执行过程中根本不修改数据源管道

  1. 数据源的状态(过滤操作中的myList及其element不会发生变化(

还要注意,尝试从行为在安全和表演

此外,仔细想想,filter操作中会受到多个线程影响的是什么。给定当前的代码,没有任何功能,只要执行了这两个操作,无论线程执行它们,都会得到一致的结果。

最新更新