allMatch,noneMatch,filter和map的Java流并行行为

Tra*_*ity 3 parallel-processing performance behavior java-8 java-stream

我在另一篇文章中读到,调查后发现anyMatch终端操作的工作方式是每个线程(在子流上操作)定期检查其他线程是否找到了结果,如果是,则所有其他线程都停止.

我想,但不知道是否有人能验证是否noneMatchallMatch也以这种方式操作的,因此运行时noneMatch,一个线程发现一个实际的匹配,则操作可以返回false.那么所有其他线程是否会按照描述的相同方式定期检查anyMatch?相似,反向适用allMatch吗?

此外,我想知道是否有在运行时为任何区别filter,并map为它们是否在有序或无序的数据流并行运行操作.在有序流上,我假设最合乎逻辑的好处是,不同的线程可以处理创建的每个子流,然后以相同的顺序将它们全部合并在一起.对于无序流,这对于我正在努力想到的操作有什么好处吗?

Tag*_*eev 6

所有这三个anyMatch,都是使用相同的类实现的,allMatch并设置了不同的标志.所以他们以非常相似的方式工作.所有这些都是短路的而且没有订购,因此无论您的流源是否有序都无关紧要:这些操作的执行速度同样快.noneMatchMatchOps

这些操作与无序源一样map,filter也没有任何好处.无序源改变用于该算法distinct,limit,skip,takeWhile(爪哇-9), dropWhile(爪哇-9).似乎正常减少(通过reducecollect)不优化无序情况(尽管我的初步研究表明这种优化是可能的).