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 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.
LinkedInArtículo relacionado - Java Map
- Mapa de incremento en Java
- Convertir valores de mapa en una lista en Java
- Filtrado de map en Java
- Convertir lista a map en Java
- Crear un map en Java