【发布时间】:2019-02-18 20:52:48
【问题描述】:
据我所知,在并行流中,findFirst、skip、limit 等方法只要流是有序的(即默认情况下)是否并行。所以我想知道为什么forEach 方法不同。我想了想,但我只是无法理解定义forEachOrdered 方法的必要性,因为默认情况下使forEach 排序可能更容易且不那么令人惊讶,然后在流实例上调用unordered,这就是它,无需定义新方法。
不幸的是,目前我对 Java 8 的实践经验非常有限,所以如果有人能解释我做出这个架构决定的原因,我将不胜感激,也许可以通过一些简单的示例/用例向我展示否则会出现什么问题.
为了清楚起见,我不是在问这个:forEach vs forEachOrdered in Java 8 Stream。我完全清楚这些方法是如何工作的以及它们之间的区别。我要问的是 Oracle 做出架构决策的实际原因。
【问题讨论】:
-
因为这样做会牺牲并行性的好处。...
-
它如何“跳过”和“限制”具有“默认排序”的行为并没有牺牲并行性的好处?有些人可能会说他们只是用这些方法遵循 POLA,但坦率地说,仅仅为“forEach”有一个例外(这总是不好的)在主观上更令人惊讶。
-
您期望
forEach以任何特定顺序应用操作的原因是什么? “为每个……”一词并不暗示它 -
我更改了标题,删除了“默认情况下”和“并行流中”,因为
forEach通常是无序的,它不是默认值,可以以某种方式更改并且即使现在顺序流可能不会利用此属性,它也被定义为无序操作。 -
“实际原因”- 如果您遵守的约束较少...和“Oracle 做出的决定”,那么可能(希望)Oracle 知道得更好
标签: java java-8 java-stream