forEach vs forEachOrdered in Java 8 Stream

foreach, java, java-8, java-stream

Solution

Stream.of("AAA","BBB","CCC").parallel().forEach(s->System.out.println("Output:"+s));
Stream.of("AAA","BBB","CCC").parallel().forEachOrdered(s->System.out.println("Output:"+s));

The second line will always output

Output:AAA
Output:BBB
Output:CCC

whereas the first one is not guaranted since the order is not kept. `forEachOrdered` will processes the elements of the stream in the order specified by its source, regardless of whether the stream is sequential or parallel.

Quoting from `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.

When the `forEachOrdered` Javadoc states (emphasis mine):

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

Problem

I understand that these methods differ the order of execution but in all my test I cannot achieve different order execution. Example: ``` 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)); ``` Output: ``` forEach Demo Output:AAA Output:BBB Output:CCC forEachOrdered Demo Output:AAA Output:BBB Output:CCC ``` Please provide examples when 2 methods will produce different outputs.

Original source

Related problems