我用Google搜索并试图找到有关它的文档但未能这样做。
问题很简单。
我有List
让我们说foo。如果我做
foo.forEach(this::doSomething)
并且对于相同的foo
再次使用相同的行我是否每次都具有相同的迭代顺序?
如果是,那么foo.stream().forEach()
呢?
答案 0 :(得分:12)
forEach
在Iterable
中定义,Javadoc说:
除非实施类别另有规定, 动作按迭代顺序执行(如果是迭代顺序 指定)。
现在List.iterator()
说:
以适当的顺序返回此列表中元素的迭代器。
因此,默认情况下,您应该期望forEach
按正确的顺序枚举元素 - 除非列表实现具有不同的迭代器实现。
根据Stream.forEach
,Javadoc告诉您不应该依赖订单:
此操作的行为明确是不确定的。对于 并行流管道,此操作不保证 尊重流的遭遇顺序,就像这样做 牺牲并行性的好处。
但也有Stream.forEachOrdered
:
在遭遇中对此流的每个元素执行操作 如果流具有已定义的遭遇顺序,则为流的顺序。