是用Java命令的List.forEach吗?

时间:2016-05-14 11:43:27

标签: java java-8 java-stream

我用Google搜索并试图找到有关它的文档但未能这样做。

问题很简单。 我有List让我们说foo。如果我做

foo.forEach(this::doSomething) 并且对于相同的foo再次使用相同的行我是否每次都具有相同的迭代顺序?

如果是,那么foo.stream().forEach()呢?

1 个答案:

答案 0 :(得分:12)

forEachIterable中定义,Javadoc说:

  

除非实施类别另有规定,   动作按迭代顺序执行(如果是迭代顺序   指定)。

现在List.iterator()说:

  

以适当的顺序返回此列表中元素的迭代器。

因此,默认情况下,您应该期望forEach按正确的顺序枚举元素 - 除非列表实现具有不同的迭代器实现。

根据Stream.forEach,Javadoc告诉您不应该依赖订单:

  

此操作的行为明确是不确定的。对于   并行流管道,此操作保证   尊重流的遭遇顺序,就像这样做   牺牲并行性的好处。

但也有Stream.forEachOrdered

  

在遭遇中对此流的每个元素执行操作   如果流具有已定义的遭遇顺序,则为流的顺序。