The forEachOrdered
method is used to loop through all the elements of the stream and perform a Consumer
For example, the stream
created from list
is ordered, so the forEachOrdered
will apply the Consumer
operation on the elements in the element order present in the stream
.
The forEachOrdered
method doesn’t return anything; it is a terminal operation.
The Consumer
operation is executed on the element before we apply the Consumer
operation on the subsequent element. However, the operation can be performed by any thread, selected by the library.
void forEachOrdered(Consumer<? super T> action)
import java.util.stream.Stream;class forEachOrdered {public static void main( String args[] ) {Stream<Integer> stream = Stream.of(1,2,3,4,5);stream.forEachOrdered((number) ->{System.out.println(number * 2);});}}
In the code above, we used the Stream.of
method to create a stream
of numbers.
Then, we called the forEachOrdered
method on the stream of numbers with the consumer operation to print each number multiplied by 2. The forEachOrdered
will loop through elements in the encounter order and print the multiple of 2 of each element on the stream.
forEachOrdered
on parallel streamIf the stream is parallel
, then the Java runtime will split the stream into multiple substreams. Aggregate operations iterate over and process these substreams in parallel, and then combine the results.
When we use forEachOrdered
, the elements are looped in the encounter order if the stream has a defined encounter order.
But when we use forEach
on the parallelStream
, the elements are not looped in encounter order, even if the stream has a defined encounter order.
import java.util.stream.Stream;import java.util.List;import java.util.Arrays;class forEachOrdered {public static void main( String args[] ) {List<Integer> list = Arrays.asList(1, 2, 3, 4);Stream<Integer> parallelStream = list.parallelStream();System.out.println("Using forEachOrdered");parallelStream.forEachOrdered((number) ->{System.out.print(number+ " ");});System.out.println();System.out.println("Using forEach");parallelStream = list.parallelStream();parallelStream.forEach((number) ->{System.out.print(number + " ");});}}
In the code above, we have:
Created a List of numbers with the Arrays.asList()
method, which will return a List
from the arguments passed.
Created the parallel stream of the List
with the parallelStream()
method.
Called the forEachOrdered
method on the parallel stream, which will iterate all the elements of the parallel stream in the encounter order.
Called the forEach
method on the parallel stream, which will iterate all the elements of the parallel stream in any order.