【发布时间】:2016-10-05 18:25:27
【问题描述】:
在使用 Collection 时,是否有任何理由在 forEach 调用之前专门插入流/并行流?
例子:
Collection<Object> foo;
foo.forEach(); // Goes through every item in foo
foo.stream().forEach(); // Does stream make a difference here
foo.parallelStream().forEach(); // Does this make a difference here?
谢谢
【问题讨论】:
-
只有在使用
parallelStream()或parallel()时才会并行调用forEach。如果这样做,您必须确保Consumer 不会更改任何内容或者是线程安全的。 -
流上的
forEach具有不同的语义,因为它与集合上的forEach不同,它不保证保持元素顺序,并且在并行流的情况下,将调用操作而不任何同步。forEachOrdered更像Collection.forEach,但在没有任何其他流操作的情况下没有任何意义。 -
另一个区别是 Collection.forEach 对修改底层集合更加宽容。
标签: java java-8 java-stream