Stream findAny() devuelve un Opcional (un objeto contenedor que puede contener o no un valor no nulo) que describe algún elemento de la transmisión, o un Opcional vacío si la transmisión está vacía.
findAny() V/s findFirst() :
El método findAny() devuelve cualquier elemento de una secuencia, pero puede haber un caso en el que necesitemos que se obtenga el primer elemento de una secuencia filtrada. Cuando la secuencia en la que se está trabajando tiene un orden de encuentro definido (el orden en que se procesan los elementos de una secuencia), entonces findFirst() es útil, ya que devuelve el primer elemento de una secuencia.
Sintaxis:
Optional<T> findAny() Where, Optional is a container object which may or may not contain a non-null value and T is the type of objects and the function returns an Optional describing some element of this stream, or an empty Optional if the stream is empty.
Excepción: si el elemento seleccionado es nulo, se lanza NullPointerException .
Nota: findAny() es una operación de cortocircuito de terminal de la interfaz Stream. Este método devuelve cualquier primer elemento que satisfaga las operaciones intermedias. Esta es una operación de cortocircuito porque solo necesita que se devuelva ‘cualquier’ primer elemento y termine el resto de la iteración.
Ejemplo 1: método findAny() en Integer Stream.
// Java code for Stream findAny() // which returns an Optional describing // some element of the stream, or an // empty Optional if the stream is empty. import java.util.*; class GFG { // Driver code public static void main(String[] args) { // Creating a List of Integers List<Integer> list = Arrays.asList(2, 4, 6, 8, 10); // Using Stream findAny() to return // an Optional describing some element // of the stream Optional<Integer> answer = list.stream().findAny(); // if the stream is empty, an empty // Optional is returned. if (answer.isPresent()) { System.out.println(answer.get()); } else { System.out.println("no value"); } } }
Producción :
2
Ejemplo 2: función findAny() en Stream of Strings.
// Java code for Stream findAny() // which returns an Optional describing // some element of the stream, or an // empty Optional if the stream is empty. import java.util.*; class GFG { // Driver code public static void main(String[] args) { // Creating a List of Strings List<String> list = Arrays.asList("Geeks", "for", "GeeksQuiz", "GFG"); // Using Stream findAny() to return // an Optional describing some element // of the stream Optional<String> answer = list.stream().findAny(); // if the stream is empty, an empty // Optional is returned. if (answer.isPresent()) { System.out.println(answer.get()); } else { System.out.println("no value"); } } }
Producción :
Geeks
Nota: El comportamiento de la operación Stream findAny() es explícitamente no determinista , es decir, es libre de seleccionar cualquier elemento en la secuencia. Varias invocaciones en la misma fuente pueden no devolver el mismo resultado.
Ejemplo 3: método findAny() para devolver los elementos divisibles por 4, de forma no determinista.
// Java code for Stream findAny() // which returns an Optional describing // some element of the stream, or an // empty Optional if the stream is empty. import java.util.OptionalInt; import java.util.stream.IntStream; class GFG { // Driver code public static void main(String[] args) { // Creating an IntStream IntStream stream = IntStream.of(4, 5, 8, 10, 12, 16) .parallel(); // Using Stream findAny(). // Executing the source code multiple times // may not return the same result. // Every time you may get a different // Integer which is divisible by 4. stream = stream.filter(i -> i % 4 == 0); OptionalInt answer = stream.findAny(); if (answer.isPresent()) { System.out.println(answer.getAsInt()); } } }
Producción :
16
Publicación traducida automáticamente
Artículo escrito por Sahil_Bansall y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA