在Java 8并行Streams中,终端操作在返回之前是否完成所有计算?

时间:2015-01-28 04:58:07

标签: java java-8

例如,如果类Foo具有实例方法bar()

List<Foo> list = new ArrayList<>();
// ...
list.stream()
    .parallel()
    .forEach(Foo::bar);
doSomething();

是否保证在调用bar()之前所有对doSomething()的调用都已返回?

1 个答案:

答案 0 :(得分:5)

是的,除了终端操作是iterator()spliterator()

来自java.util.stream package page:

  

在几乎所有情况下,终端操作都很渴望,在返回之前完成数据源的遍历和管道的处理。只有终端操作iterator()和spliterator()不是;这些是作为“逃生舱口”提供的,以便在现有操作不足以执行任务时启用任意客户端控制的管道遍历。