Convertir lista a map en Java

Rupam Yadav 12 octubre 2023
  1. Método Stream findFirst() en Java 8
  2. Método Stream findAny() en Java 8
Convertir lista a map en Java

La API java.util.stream se introdujo en Java 8; se utiliza para procesar una colección de objetos. Diferentes fuentes, como matrices o colecciones, pueden crear un stream.

Aquí, veremos de cerca los métodos de transmisión findFirst() y findAny() y cuándo usarlos.

Método Stream findFirst() en Java 8

Stream no altera los datos originales; evalúa los elementos de la corriente utilizando los métodos de canalización.

El método Stream API findFirst() es una operación de terminal; termina y devuelve un resultado. Usamos el método findfFirst() cuando necesitamos el primer elemento de la secuencia.

Este método devuelve un Optional<T>, que describe el primer elemento de la secuencia. Aquí T es el tipo que es String.

Opcional es un objeto contenedor; puede o no tener un valor no nulo. Si la secuencia está vacía, el Optional devuelto estará vacío.

Creamos una Lista de frutas y números que contienen datos de tipo String e Integer, respectivamente, usando el método findFirst() en un contexto diferente. Llamamos al .stream() en la lista que devuelve un flujo de elementos de la lista.

Necesitamos el primer elemento de esa lista, por lo que llamamos al método findFirst(). Devuelve un Opcional, que guardamos en primero.

Comprobamos si la instancia Opcional contiene un valor o no usando el método isPresent() que devuelve un booleano. Si devuelve verdadero, tenemos un valor y lo obtenemos usando first.get() y lo imprimimos. Si la instancia Opcional está vacía, no imprimimos ningún valor.

La segunda instrucción numbers.stream().filter((x)->x>5).findFirst() da una segunda instancia Optional firstN. Primero aplicamos el método filter() para devolver un flujo filtrado basado en un predicado dado.

Este método devuelve un nuevo flujo de elementos con un valor superior a 5. De esa secuencia, necesitamos obtener el primer elemento. En nuestro caso, el primer elemento con un valor mayor que 5 en la secuencia de números es solo 8.

import java.util.List;
import java.util.Optional;

public class StreamTest {
  public static void main(String[] args) {
    List<String> fruits = List.of("Apple", "Grapes", "Orange", "Kiwi");
    List<Integer> numbers = List.of(4, 5, 3, 8);

    Optional<String> first = fruits.stream().findFirst();
    if (first.isPresent()) {
      String string = first.get();
      System.out.println("First String is : " + string);
    } else {
      System.out.println("No value");
    }
    Optional<Integer> firstN = numbers.stream().filter((x) -> x > 5).findFirst();
    if (firstN.isPresent()) {
      System.out.println("First Number is : " + firstN.get());
    } else {
      System.out.println("No value");
    }
  }
}

Producción :

First String is : Apple
First Number is : 8

Método Stream findAny() en Java 8

El método findAny() devuelve una instancia Optional que describe cualquier elemento del flujo. Tenemos una lista de elementos de tipo Integer en el programa a continuación.

Creamos un flujo de la lista y filtramos ese flujo para devolver números que tengan un valor inferior a 5. Luego llamamos a findAny() para obtener cualquier número de ese flujo filtrado.

En la mayoría de los casos, devolverá el primer elemento. Si la instancia Opcional firstN no está vacía, imprimimos el valor de la instancia que obtenemos usando el método get().

import java.util.List;
import java.util.Optional;

public class StreamTest {
  public static void main(String[] args) {
    List<Integer> numbers = List.of(4, 5, 2, 8);
    Optional<Integer> firstN = numbers.stream().filter((x) -> x < 5).findAny();
    if (firstN.isPresent()) {
      System.out.println("Any First Number less then 5 is : " + firstN.get());
    } else {
      System.out.println("No value");
    }
  }
}

Producción :

Any First Number less then 5 is : 4

Tenga en cuenta que en el caso de secuencias secuenciales y paralelas, el comportamiento de los métodos findAny() y findFirst() no cambiará. El comportamiento de findAny() en el caso Streams no paralelos no está garantizado.

Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artículo relacionado - Java Stream