我知道这些方法的执行顺序不同,但在我的所有测试中,我都无法实现不同的顺序执行.
例:
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)
请提供两种方法产生不同输出的示例.
前提:我已经阅读了这个问题和其他问题,但我需要一些澄清。
我知道该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)
难道是我的直觉错了?我是否遗漏了整个机制的某些内容?