Crear un map ordenado en Java

Rashmi Patidar 12 octubre 2023
  1. Ordenar el map usando la clase TreeMap en Java
  2. Crear un orden de map con funciones de Java 8
Crear un map ordenado en Java

Un map es una estructura de datos en Java que almacena pares de clave y valor. El map es una interfaz presente en la jerarquía Collection. Estas claves son únicas, por lo que no se permiten claves duplicadas; sin embargo, las variables asignadas a la clave pueden tener valores duplicados. Clases como HashMap, LinkedHashMap y TreeMap implementan la interfaz de Map.

Ordenar el map usando la clase TreeMap en Java

A continuación, el programa demuestra el orden de map en el programa Java.

import java.util.TreeMap;

public class Main {
  public static void main(String[] args) {
    TreeMap<String, Integer> map = new TreeMap<String, Integer>();
    map.put("Third", 1);
    map.put("First", 2);
    map.put("Second", 3);

    for (String key : map.keySet()) {
      System.out.println(key + " ,ID = " + map.get(key));
    }
  }
}

La clase TreeMap ordena los valores del map en orden ascendente. También implementa la interfaz SortedMap internamente, por lo que se crea una instancia de map utilizando una nueva palabra clave.

El tipo de datos dentro del map de árbol se especifica en el momento de la instanciación. La clave Map es del tipo String y su valor es del tipo Integer.

La función put inserta los pares clave-valor en el map de árbol. Ahora, se define un bucle for-each para iterar sobre el map. En Java, la iteración directa sobre el map no es posible. Por lo tanto, las claves del map se convierten inicialmente en una instancia Set.

La función map.keySet devuelve el Set de claves presentes en el map. Esta función está en la clase TreeMap y devuelve la vista ordenada de las claves presentes. La función get obtiene el valor correspondiente a la clave.

A continuación se muestra la salida en orden ascendente.

First, ID = 2 Second, ID = 3 Third, ID = 1

Crear un orden de map con funciones de Java 8

Java 8 proporciona soporte para la programación funcional que permite a los usuarios trabajar en la cadena de funciones.

Streams es una interfaz en el paquete java.util que proporciona una facilidad para trabajar sobre las operaciones secuenciales en una sola declaración. La función Streams funciona en la tubería donde un emisor emite datos; se filtra, procesa, transforma y mucho más, según las necesidades de los usuarios.

package F09;

import static java.util.AbstractMap.SimpleEntry;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class MapOrdering {
  public static void main(String[] args) {
    Map<String, String> mapSortedByKey =
        Stream
            .of(new SimpleEntry<>("key3", "value1"), new SimpleEntry<>("key1", "value2"),
                new SimpleEntry<>("key2", "value3"))
            .sorted(Map.Entry.comparingByKey())
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                (oldVal, newValue) -> oldVal, LinkedHashMap::new));

    System.out.println();
    System.out.print("Ordered List: ");
    for (String s1 : mapSortedByKey.keySet()) {
      System.out.print(" " + s1);
    }
  }
}

La interfaz Stream proporciona varias funciones y consigue su implementación en diferentes clases para trabajar sobre ellas. Aquí, el flujo de pares clave-valor se forma utilizando la clase new SimpleEntry. Los valores se insertan en la función of para formar un flujo.

En la serie de la cadena, se llama a la función sorted. La función toma una instancia de Comparator para ordenar las teclas en una secuencia en función del orden definido. La función comparingByKey devuelve el comparador que compara la clave en orden natural ascendente.

La función sorted finalmente devuelve un flujo de valores dispuestos en orden ascendente. La función collect de la clase Stream recopila los valores de map dados en una nueva instancia de LinkedHashMap. La clase conserva el orden de inserción de la secuencia proporcionada. La función toma la instancia Colector como parámetro.

El primer parámetro es una función de proveedor toMap que crea un nuevo contenedor. El segundo parámetro es BiConsumer que acumula el valor, y el último parámetro es BiConsumer que actúa como un combinador que fusiona los resultados. Entonces, el comando LinkedHashMap::new combina el resultado y devuelve la instancia formada.

La instancia mapSortedByKey ahora contiene los elementos del map secuencial que se iteran usando el bucle for-each anterior. Las claves de map resultantes se imprimen en la salida estándar a continuación.

Ordered List : key1 key2 key3
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

Artículo relacionado - Java Map

Artículo relacionado - Java Sort