Método Collectors toMap() en Java con ejemplos

El método toMap() es un método estático de la clase Collectors que devuelve un Collector que acumula elementos en un Map cuyas claves y valores son el resultado de aplicar las funciones de mapeo proporcionadas a los elementos de entrada. Tenga en cuenta que las claves son únicas y si, en cualquier caso, las claves se duplican, se lanza una IllegalStateException cuando se realiza la operación de recopilación.

Hay 3 sobrecargas del método toMap():

toMap (Mapeador de teclas de función, Mapeador de valores de función)

Sintaxis:

public static  Collector<T, ?, Map>
    toMap(Function keyMapper, Function valueMapper)

dónde

  • T : Tipo de elementos de entrada.
  • Mapa : Mapa de salida.
  • Colector de interfaz: una operación de reducción mutable que acumula elementos de entrada en un contenedor de resultados mutable, transformando opcionalmente el resultado acumulado en una representación final después de que se hayan procesado todos los elementos de entrada. Las operaciones de reducción se pueden realizar secuencialmente o en paralelo.
  • toMap() : método estático de la clase Collectors y devuelve un Collector que recopila elementos en un Map cuyas claves y valores son el resultado de aplicar funciones de mapeo a los elementos de entrada. La clase Collectors está bajo el paquete java.util.streams.

Parámetros: Este método acepta los siguientes parámetros:

  • keyMapper : una función de mapeo para producir claves
  • valueMapper : una función de mapeo para producir valores

Valor devuelto: este método devuelve un recopilador que recopila elementos en un mapa cuyas claves y valores son el resultado de aplicar funciones de mapeo a los elementos de entrada.

El siguiente ejemplo ilustra el método anterior:

// Java program to demonstrate
// toMap() method with unique keys
  
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // Create a String with no repeated keys
        Stream<String[]>
            str = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "G", "Geeks" } });
  
        // Convert the String to Map
        // using toMap() method
        Map<String, String>
            map = str.collect(
                Collectors.toMap(p -> p[0], p -> p[1]));
  
        // Print the returned Map
        System.out.println("Map:" + map);
    }
}
Producción:

Map:{G=Geeks, g=geeks, GFG=GeeksForGeeks}

toMap(Función keyMapper, Función valueMapper, BinaryOperator<U> mergeFunction)

Esta es una sobrecarga del método toMap() en el que se agrega un parámetro adicional a la clave y los valores y esa es la función de fusión . La tarea de la función es fusionar los valores que tienen la misma clave de una manera definida por el codificador. Este método sobrecargado se recomienda solo en el caso de que haya las mismas claves para varios valores. Un ejemplo simple se da a continuación.

Sintaxis:

public static  Collector<T, ?, Map> 
    toMap(Function keyMapper, 
          Function valueMapper, 
          BinaryOperator<U> mergeFunction)

dónde

  • T : Tipo de elementos de entrada.
  • Mapa : Mapa de salida.
  • Colector de interfaz: una operación de reducción mutable que acumula elementos de entrada en un contenedor de resultados mutable, transformando opcionalmente el resultado acumulado en una representación final después de que se hayan procesado todos los elementos de entrada. Las operaciones de reducción se pueden realizar secuencialmente o en paralelo.
  • toMap() : método estático de la clase Collectors y devuelve un Collector que recopila elementos en un Map cuyas claves y valores son el resultado de aplicar funciones de mapeo a los elementos de entrada. La clase Collectors está bajo el paquete java.util.streams.

Parámetros: Este método acepta los siguientes parámetros:

  • keyMapper : una función de mapeo para producir claves
  • valueMapper : una función de mapeo para producir valores
  • mergeFunction : una función de combinación, utilizada para resolver colisiones entre valores asociados con la misma clave, como se proporciona a Map.merge(Object, Object, BiFunction)

Valor devuelto: este método devuelve un recopilador que recopila elementos en un mapa cuyas claves son el resultado de aplicar una función de asignación de claves a los elementos de entrada y cuyos valores son el resultado de aplicar una función de asignación de valores a todos los elementos de entrada iguales a la clave. y combinándolos usando la función merge

El siguiente ejemplo ilustra el método anterior:

// Java program to demonstrate
// toMap() method without unique keys
  
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // Create a String with repeated keys
        Stream<String[]>
            str = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "GFG", "geeksforgeeks" } });
  
        // Get Map from String
        // using toMap() method
        Map<String, String>
            map = str
                      .collect(Collectors
                                   .toMap(p -> p[0], p -> p[1], (s, a) -> s + ", " + a));
  
        // Print the Map
        System.out.println("Map:" + map);
    }
}
Producción:

Map:{g=geeks, GFG=GeeksForGeeks, geeksforgeeks}

toMap(Función keyMapper, Función valueMapper, BinaryOperator<U> mergeFunction, Proveedor mapSupplier)

Este es un método sobrecargado de toMap() con un parámetro adicional .ie Proveedores. Necesitamos pasar proveedor aquí. Proveedor es la interfaz de la clase java.util.Function. Esta es una interfaz funcional y, por lo tanto, se puede usar como destino de asignación para una expresión lambda o una referencia de método. Si queremos devolver LinkedHashMap, debemos pasar proveedor como LinkedHashMap::new. En el ejemplo siguiente haremos lo mismo.

Sintaxis:

public static <T, K, U, M extends Map> Collector 
    toMap(Function keyMapper,
          Function valueMapper,
          BinaryOperator<U> mergeFunction,
          Supplier mapSupplier)

dónde

  • T : Tipo de elementos de entrada.
  • Mapa : Mapa de salida.
  • Colector de interfaz: una operación de reducción mutable que acumula elementos de entrada en un contenedor de resultados mutable, transformando opcionalmente el resultado acumulado en una representación final después de que se hayan procesado todos los elementos de entrada. Las operaciones de reducción se pueden realizar secuencialmente o en paralelo.
  • toMap() : método estático de la clase Collectors y devuelve un Collector que recopila elementos en un Map cuyas claves y valores son el resultado de aplicar funciones de mapeo a los elementos de entrada. La clase Collectors está bajo el paquete java.util.streams.

Parámetros: Este método acepta los siguientes parámetros:

  • keyMapper : una función de mapeo para producir claves
  • valueMapper : una función de mapeo para producir valores
  • mergeFunction : una función de combinación, utilizada para resolver colisiones entre valores asociados con la misma clave, como se proporciona a Map.merge(Object, Object, BiFunction)
  • mapSupplier : una función que devuelve un mapa nuevo y vacío en el que se insertarán los resultados

Valor devuelto: este método devuelve un recopilador que recopila elementos en un mapa cuyas claves son el resultado de aplicar una función de asignación de claves a los elementos de entrada y cuyos valores son el resultado de aplicar una función de asignación de valores a todos los elementos de entrada iguales a la clave. y combinándolos usando la función merge

El siguiente ejemplo ilustra el método anterior:

// Java program to demonstrate
// toMap() method
  
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.*;
  
public class GFG {
  
    public static void main(String[] args)
    {
  
        // Create a String to be converted
        Stream<String[]>
            Ss1 = Stream
                      .of(new String[][] { { "GFG", "GeeksForGeeks" },
                                           { "g", "geeks" },
                                           { "GFG", "Geeks" } });
  
        // Get Map from String
        // using toMap() method
        LinkedHashMap<String, String>
            map2 = Ss1
                       .collect(Collectors
                                    .toMap(
                                        p -> p[0], p -> p[1], (s, a) -> s + ", " + a, LinkedHashMap::new));
  
        // Print the Map
        System.out.println("Map:" + map2);
    }
}
Producción:

Map:{GFG=GeeksForGeeks, Geeks, g=geeks}

Publicación traducida automáticamente

Artículo escrito por piyush25pv y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *