是用Java命令的List.forEach吗?

Sar*_*aya 9 java java-8 java-stream

我搜索了这个,并试图找到有关它的文档,但没有这样做.

问题很简单.我有一个List让我们说foo的话.如果我做

foo.forEach(this::doSomething) 再次使用相同的行,foo我每次都会有相同的迭代次序吗?

如果是的话,怎么样foo.stream().forEach()

wer*_*ero 15

forEach定义在Iterable和Javadoc说:

除非实现类另有指定,否则操作按迭代顺序执行(如果指定了迭代顺序).

现在List.iterator()说:

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

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


Stream.forEachJavadoc告诉你,你不应该依赖订单:

此操作的行为明确是不确定的.对于并行流管道,这个操作并不能保证尊重流的相遇顺序,因为这样做会牺牲并行的利益.

但也有Stream.forEachOrdered:

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