I am little confused between Stream#findAny()
and Stream#findFirst()
of the Stream
API in Java 8.
What I understood is that both will return the first matched element from the stream, for example, when used in conjunction with filter?
So, why two methods for the same task? Am I missing something?
Stream#anyMatch() returns a boolean while Stream#findAny() returns an object which matches the predicate. They almost do the same work. anyMatch is a short-circuit operation, but filter will always process the whole stream.
The findAny() method of the Java Stream returns an Optional for some element of the stream or an empty Optional if the stream is empty. Here, Optional is a container object which may or may not contain a non-null value.
Java 8 Stream#findFirst() is a short-circuiting terminal operation. Meaning it will stop generating the stream once an element is found (usually used with a filter() operation).
What I understood is that both will return the first matched element from the stream, for example, when used in conjunction with filter?
That's not true. According to the javadoc, Stream#findAny()
:
Returns an
Optional<T>
describing some element of the stream, or an emptyOptional<T>
if the stream is empty. The behavior of this operation is explicitly nondeterministic; it is free to select any element in the stream. This is to allow for maximal performance in parallel operations;
while Stream.findFirst()
will return an Optional<T>
describing strictly the first element of the stream. The Stream
class doesn't have a .findOne()
method, so I suppose you meant .findFirst()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With