java - List.forEach 是用 Java 排序的吗?

标签 java java-8 java-stream

我用谷歌搜索了这个,也试图找到关于它的文档,但没有找到。

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

foo.forEach(this::doSomething) 并为相同的 foo 再次使用相同的行,每次迭代的顺序是否相同?

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

最佳答案

forEachIterable 中定义,Javadoc 说:

Unless otherwise specified by the implementing class, actions are performed in the order of iteration (if an iteration order is specified).

现在 List.iterator() 说:

Returns an iterator over the elements in this list in proper sequence.

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


根据 Stream.forEach 的 Javadoc 告诉你你不应该依赖一个命令:

The behavior of this operation is explicitly nondeterministic. For parallel stream pipelines, this operation does not guarantee to respect the encounter order of the stream, as doing so would sacrifice the benefit of parallelism.

但是还有Stream.forEachOrdered:

Performs an action for each element of this stream, in the encounter order of the stream if the stream has a defined encounter order.

关于java - List.forEach 是用 Java 排序的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226231/

相关文章:

java - 如何在 Java 8 的流过滤器中比较两个日期?

java - Java 线程转储中的 "Lock released while waiting:"是什么意思?

java - Java 8 lambda 和匿名内部类之间的性能差异

java - 使用 javax.smartcardio 从 mifare classic 读取 block

android - 无法解析com.android.tools.build:gradle:3.0.1;

java - 从 ZoneDdateTime 转换日期给出本地时间而不是 ZonedTime

java - 在 Java 8 流中使用每个元素类型的特定消费者

lambda - optional <List> Java 8 lambda 表达式获取第一个元素

Java代码问题: search and replace

java - 为什么我在使用 G1GC 时会变高 `Ref Proc` 次