Introducción: Un mapa múltiple es una forma general de asociar claves con muchos valores arbitrarios . El marco Multimap de Guava facilita el manejo de un mapeo de claves a múltiples valores. Hay dos formas de pensar en un mapa múltiple conceptualmente:
1) como una colección de asignaciones de claves únicas a valores únicos.
a -> 1 a -> 2 a -> 4 b -> 3 c -> 5
2) Como un mapeo de claves únicas a colecciones de valores.
a -> [1, 2, 4] b -> [3] c -> [5]
Declaración: la declaración de la interfaz com.google.common.collect.Multimap< K, V > es como:
@GwtCompatible public interface Multimap
A continuación se muestra la lista de algunos métodos proporcionados por la interfaz Multimap de Guava:
Vistas: Multimap también admite varias vistas potentes. Gran parte del poder de la API multimapa proviene de las colecciones de vistas que proporciona. Estos siempre reflejan el estado más reciente del propio mapa múltiple.
- asMap ve cualquier Multimap< K, V > como Map< K, Collection< V > >. El mapa devuelto admite la eliminación y los cambios en las colecciones devueltas se escriben, pero el mapa no admite put o putAll.
- las entradas visualizan la Colección< Mapa.Entrada< K, V > > de todas las entradas en el Multimapa. (Para un SetMultimap, esto es un Set).
- keySet ve las claves distintas en el mapa múltiple como un conjunto.
- keys ve las claves del Multimap como un Multiset, con una multiplicidad igual al número de valores asociados a esa clave. Los elementos se pueden eliminar del Multiset, pero no agregar, los cambios se escribirán.
- valores() ve todos los valores en el mapa múltiple como una colección < V > «aplanada», todo como una colección. Esto es similar a Iterables.concat(multimap.asMap().values()), pero en su lugar devuelve una colección completa.
Algunos otros métodos proporcionados por la interfaz multimapa de Guava son:
Multimap V/s Map: un Multimap< K, V > no es un Map< K, Collection< V > >, aunque dicho mapa podría usarse en una implementación de Multimap. A continuación se dan las diferencias:
- Multimap.get(key) siempre devuelve una colección no nula , posiblemente vacía. Esto no implica que el mapa múltiple gaste memoria asociada con la clave, sino que la colección devuelta es una vista que le permite agregar asociaciones con la clave si lo desea.
- Si prefiere el comportamiento más similar a un mapa de devolver un valor nulo para las claves que no están en el mapa múltiple, use la vista asMap() para obtener Map< K, Collection< V > >.
- Multimap.containsKey(key) es verdadero si y solo si hay algún elemento asociado con la clave especificada. En particular, si una clave k se asoció previamente con uno o más valores que desde entonces se eliminaron del mapa múltiple, Multimap.containsKey(k) devolverá falso.
- Multimap.entries() devuelve todas las entradas para todas las claves en Multimap. Si desea todas las entradas de recopilación de claves, utilice asMap().entrySet().
- Multimap.size() devuelve el número de entradas en todo el mapa múltiple, no el número de claves distintas. Use Multimap.keySet().size() en su lugar para obtener el número de claves distintas.
Implementaciones: Multimap proporciona una amplia variedad de implementaciones. Puede usarlo en la mayoría de los lugares donde habría usado Map< K, Collection< V > > .
Ventajas: los multimapas se usan comúnmente en lugares donde de otro modo habría aparecido un Mapa< K, Colección< V > >.
- No es necesario llenar una colección vacía antes de agregar una entrada con put().
- El método get() nunca devuelve un valor nulo, solo una colección vacía (no es necesario que verifiquemos un valor nulo como en el caso de prueba Map< String, Collection< V > > ).
- Una clave está contenida en el mapa múltiple si y solo si se asigna a al menos un valor. Cualquier operación que haga que una clave tenga cero valores asociados, tiene el efecto de eliminar esa clave del Multimapa.
- El recuento total de valores de entrada está disponible como tamaño().
Referencias:
Google Guayaba
Publicación traducida automáticamente
Artículo escrito por Sahil_Bansall y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA