相关疑难解决方法(0)

Java 8 Stream中的forEach vs forEachOrdered

我知道这些方法的执行顺序不同,但在我的所有测试中,我都无法实现不同的顺序执行.

例:

System.out.println("forEach Demo");
Stream.of("AAA","BBB","CCC").forEach(s->System.out.println("Output:"+s));
System.out.println("forEachOrdered Demo");
Stream.of("AAA","BBB","CCC").forEachOrdered(s->System.out.println("Output:"+s));
Run Code Online (Sandbox Code Playgroud)

输出:

forEach Demo
Output:AAA
Output:BBB
Output:CCC
forEachOrdered Demo
Output:AAA
Output:BBB
Output:CCC
Run Code Online (Sandbox Code Playgroud)

请提供两种方法产生不同输出的示例.

java foreach java-8 java-stream

71
推荐指数
3
解决办法
4万
查看次数

Java Stream:forEach 和 forEachOrdered 之间的区别

前提:我已经阅读了这个问题和其他问题,但我需要一些澄清。

我知道该Stream.forEach方法在处理并行流时(不仅)有所不同,这解释了为什么

//1
Stream.of("one ","two ","three ","four ","five ","six ")
.parallel()
.forEachOrdered(item -> System.out.print(item));
Run Code Online (Sandbox Code Playgroud)

印刷

one two three four five six
Run Code Online (Sandbox Code Playgroud)

但是当涉及到中间操作时,当流并行化时,顺序就不再保证了。所以这段代码

//2
Stream.of("one ","two ","three ","four ","five ","six ")
.parallel()
.peek(item -> System.out.print(item))
.forEachOrdered(item -> System.out.print(""));
Run Code Online (Sandbox Code Playgroud)

会打印类似的东西

four six five one three two 
Run Code Online (Sandbox Code Playgroud)

说该forEachOrdered方法仅影响其自身执行中的元素顺序是否正确?直觉上,我认为//1示例与

//3
Stream.of("one ","two ","three ","four ","five ","six ")
.parallel()
.peek(item -> System.out.print("")) //or any other intermediate operation
.sequential()
.forEach(item -> System.out.print(item));
Run Code Online (Sandbox Code Playgroud)

难道是我的直觉错了?我是否遗漏了整个机制的某些内容?

java foreach java-8 java-stream

3
推荐指数
1
解决办法
2794
查看次数

标签 统计

foreach ×2

java ×2

java-8 ×2

java-stream ×2