logo

Multimapa Java 8

Java proporciona varias bibliotecas de colección integradas útiles. Pero a veces necesitábamos tipos especiales de colecciones que no están integradas en la biblioteca estándar de Java. Uno de esta colección es el Multimapa . En esta sección, aprenderemos qué es multimapa y cómo implementar multimapa en Java, y el Interfaz multimapa de la biblioteca Guava.

Multimapa de Java

En Java, Mapa es una estructura de datos que nos permite asignar clave a valor. Por otro lado, multimap es un nuevo tipo de colección que se encuentra en la biblioteca Guava y que permite asignar una única clave a múltiples valores (como las relaciones de uno a muchos en DBMS). Pero tenga en cuenta que JDK no permite la asignación múltiple.

Multimapa Java 8

La solución alternativa para implementar multimapa en Java utilizando la biblioteca Guava de Google y las bibliotecas de Apache Commons Collections. Ambos proporcionan una implementación de la interfaz Multimap. Puede almacenar más de un valor en una sola clave. Tanto las claves como los valores almacenados en la colección y considerados como una alternativa a Mapa o Mapa (Marco de colecciones JDK estándar).

formateador de cadenas

Pero usar Multimap de la biblioteca Guava de Google no nos resulta de mucha ayuda. En su lugar, implementaremos nuestra propia clase Multimap en Java que también se puede personalizar en consecuencia. Es fácil escribir una clase Multimap en Java.

El siguiente programa Java muestra la implementación de la clase Multimap en Java usando Map y colección.

Implementación de mapas múltiples de Java

MultimapExample.java

árbol binario vs árbol de búsqueda binaria
 import java.util.*; class MultiMap { //creating a map of key and value (collection) private Map<k, collection> map = new HashMap(); //add the specified value with the specified key in this multimap public void put(K key, V value) { if (map.get(key) == null) { map.put(key, new ArrayList()); } map.get(key).add(value); } //associate the specified key with the given value if not already associated with a value public void putIfAbsent(K key, V value) { if (map.get(key) == null) { map.put(key, new ArrayList()); } // if the value is absent, insert it if (!map.get(key).contains(value)) { map.get(key).add(value); } } //the method returns the Collection of values to which the specified key is mapped, or null if this multimap contains no mapping for the key public Collection get(Object key) { return map.get(key); } //the method returns a set view of the keys contained in this multimap public Set keySet() { return map.keySet(); } //the method returns a set view of the mappings contained in this multimap public Set<map.entry<k, collection>&gt; entrySet() { return map.entrySet(); } //the method returns a Collection view of Collection of the values present in this multimap public Collection<collection> values() { return map.values(); } //Returns true if this multimap contains a mapping for the specified key. public boolean containsKey(Object key) { return map.containsKey(key); } //Removes the mapping for the specified key from this multimap if present and returns the Collection of previous values associated with the key, or null if there was no mapping for key public Collection remove(Object key) { return map.remove(key); } //Returns the total number of key-value mappings in this multimap. public int size() { int size = 0; for (Collection value: map.values()) { size += value.size(); } return size; } //Returns true if this multimap contains no key-value mappings. public boolean isEmpty() { return map.isEmpty(); } //Removes all the mappings from this multimap. public void clear() { map.clear(); } //Removes the entry for the specified key only if it is currently mapped to the specified value and returns true if removed public boolean remove(K key, V value) { if (map.get(key) != null) // key exists return map.get(key).remove(value); return false; } //Replaces the entry for the specified key only if currently mapped to the specified value and return true if replaced public boolean replace(K key, V oldValue, V newValue) { if (map.get(key) != null) { if (map.get(key).remove(oldValue)) { return map.get(key).add(newValue); } } return false; } } //main class public class MultimapExample { //main method public static void main(String args[]) { //Creating a multimap of type String MultiMap multimap = new MultiMap(); //adding values to the multimap multimap.put(&apos;a&apos;, &apos;Andrew&apos;); multimap.put(&apos;b&apos;, &apos;Albert&apos;); multimap.put(&apos;b&apos;, &apos;Tom&apos;); multimap.put(&apos;d&apos;, &apos;Sam&apos;); multimap.put(&apos;d&apos;, &apos;Reo&apos;); multimap.put(&apos;g&apos;, &apos;Jack&apos;); multimap.put(&apos;g&apos;, &apos;David&apos;); System.out.println(&apos;----- Printing Multimap using keySet -----
&apos;); //loop iterate over multimap for (String lastName: multimap.keySet()) { //printing key and values System.out.println(lastName + &apos;: &apos; + multimap.get(lastName)); } } } </collection></map.entry<k,></k,>

Producción:

 ----- Printing Multimap using keySet ----- a: [Andrew] b: [Albert, Tom] d: [Sam, Reo] g: [Jack, David] 

Usando la biblioteca de guayaba de Google

Multimapa La interfaz está definida en com.google.common.collect paquete de la biblioteca Guava. Implementa muchas clases nombradas de la siguiente manera:

ArrayListMultimap, ForwardingListMultimap, ForwardingMultimap, ForwardingSetMultimap, ForwardingSortedSetMultimap, HashMultimap, ImmutableListMultimap, ImmutableMultimap, ImmutableSetMultimap, LinkedHashMultimap, LinkedListMultimap, TreeMultimap.

Sintaxis:

guardar videos de youtube vlc
 @GwtCompatible public interface Multimap 

Una colección que asigna claves a valores (igual que en Map) pero cada clave puede estar asociada con múltiples valores. Podemos visualizar el contenido de un mapa múltiple como un mapa desde claves hasta colecciones de valores no vacías. Por ejemplo:

  • X → 1, 2
  • Y → 3

o

  • X → 1
  • X → 2
  • Y → 3

Métodos de interfaz de mapas múltiples de Java

Método Descripción
comoMapa() Devuelve una vista de este mapa múltiple como un mapa de cada clave distinta a la colección no vacía de los valores asociados de esa clave.
claro() Elimina todos los pares clave-valor del mapa múltiple y lo deja vacío.
contieneEntrada(Clave de objeto, Valor de objeto) Devuelve verdadero si este mapa múltiple contiene al menos un par clave-valor con la clave y el valor.
contiene clave (clave de objeto) Devuelve verdadero si este mapa múltiple contiene al menos un par clave-valor con la clave.
contieneValor(Valor del objeto) Devuelve verdadero si este mapa múltiple contiene al menos un par clave-valor con el valor.
entradas() Devuelve una colección de vistas de todos los pares clave-valor contenidos en este mapa múltiple, como instancias de Map.Entry.
es igual(Objeto obj) Compara el objeto especificado con este mapa múltiple para determinar la igualdad.
para cada uno (acción BiConsumer) Realiza la acción dada para todos los pares clave-valor contenidos en este mapa múltiple.
obtener (tecla K) Devuelve una colección de vistas de los valores asociados con la clave en este mapa múltiple, si corresponde.
código hash() Devuelve el código hash para este mapa múltiple.
esta vacio() Devuelve verdadero si este mapa múltiple no contiene pares clave-valor.
llaves() Devuelve una colección de vistas que contiene la clave de cada par clave-valor en este mapa múltiple, sin contraer duplicados.
juego de llaves() Devuelve una colección de vistas de todas las claves distintas contenidas en este mapa múltiple.
poner (tecla K, valor V) Almacena un par clave-valor en este mapa múltiple.
putAll (tecla K, valores iterables) Almacena un par clave-valor en este mapa múltiple para cada uno de los valores, todos usando la misma clave, clave.
putAll(multimapa multimapa) Almacena todos los pares clave-valor de multimap en este multimap, en el orden devuelto por multimap.entries().
eliminar (clave del objeto, valor del objeto) Elimina un único par clave-valor con la clave y el valor de este mapa múltiple, si existe.
eliminar todo (clave de objeto) Elimina todos los valores asociados con la clave.
reemplazarValores (tecla K, valores iterables) Almacena una colección de valores con la misma clave, reemplazando cualquier valor existente para esa clave.
tamaño() Devuelve el número de pares clave-valor en este mapa múltiple.
valores() Devuelve una colección de vistas que contiene el valor de cada par clave-valor contenido en este mapa múltiple, sin contraer duplicados (por lo que valores().tamaño() == tamaño()).