The findAny()
method returns an Optional describing the any element of the given stream if Stream is non-empty, or an empty Optional
if the stream is empty.
In non-parallel streams,
findAny()
will return the first element in most of the cases but this behavior is not gauranteed.
The Stream.findAny()
method has been introduced for performance gain in case of parallel streams, only.
1. Stream findAny()
Method
Optional<T> findAny()
- The
findAny()
method is a terminal short-circuiting operation. - The
findAny()
method returns anOptional
. - The
Optional
contains the value as any element of the given stream, if Stream is non-empty. The returned element is the first element in most of the cases. - The
Optional
contains the empty value, if Stream is empty. - If the element selected is
null
, NullPointerException is thrown. - For all the sequential and parallel streams, it may return any element. The behavior of
findAny()
does not change by the parallelism of the Stream. - Similarily, there is no gauranteed behavioral difference in case of a strream has defined encounter order or it has no encounter order at all.
2. Stream findAny()
Example
In the given example, we are using the finaAny()
method to get any element from the Stream
. As soon as, we get the first element, the stream operation moves to ifPresent()
method.
We print the recieved element in using the method reference inside ifPresent()
method.
import java.util.stream.Stream; public class Main { public static void main(String[] args) { //sequential stream Stream.of("one", "two", "three", "four") .findAny() .ifPresent(System.out::println); //parallel stream Stream.of("one", "two", "three", "four") .parallel() .findAny() .ifPresent(System.out::println); } }
Program output.
one one
3. Stream findFirst() vs findAny()
In non-parallel streams, findFirst()
and findAny()
, both may return the first element of the Stream in most cases. But findAny()
does not offer any guarantee of this behavior.
Use findAny()
to get any element from any parallel stream in faster time. Else we can always use findFirst()
in most of the cases.
Happy Learning !!
Leave a Reply