guava multimap

Agregando una clave con un valor vacío a Guava Multimap



(2)

Como cubre el javadoc , un multimapa es conceptualmente un grupo de pares clave-valor donde las claves no son necesariamente únicas, por ejemplo a = 1, a = 2, b = 3. Si no hay valores asociados con a, entonces no hay pares clave-valor para a, por lo que a no existe en el multimapa.

Una cosa que puede hacer es mantener un Set<K> separado Set<K> para todo el universo de claves que le interesan, o simplemente mantener las claves adicionales que no corresponden a ningún valor. Otra es usar un Map<K, Collection<V>> o un Map<K, Something> donde Something contiene una colección que puede o no estar vacía.

Tengo la necesidad de agregar una clave a un Multimapa de guayaba con una colección vacía como valor. ¿Cómo logro esto?

Intenté esto:

map.put( "my key", null );

pero llamar a get () devuelve una lista con un elemento, que es nulo. Trabajé alrededor de esto haciendo lo siguiente:

map.putAll("my key2", new ArrayList())

pero me pregunto si esto es algo malo de hacer? Sé que la guayaba elimina automáticamente una clave cuando se elimina el último valor para mantener consistente la clave (). ¿Cuál es mi mejor opción aquí?


Multimap prohíbe deliberadamente este enfoque, y su solución propuesta es no operativa, en realidad no hará nada.

La forma en que funciona Multimap es que multimap.get(key) nunca devuelve nulo, pero siempre devuelve alguna colección, posiblemente vacía. (Pero la implementación de Multimap respaldo probablemente no almacena nada para esa clave, y si una clave no se asigna a una colección no vacía , por ejemplo, no aparecerá en el conjunto de keySet() . Multimap no es un Map<K, Collection<V>> .)

Si desea asignar una colección vacía, debe usar Map<K, List<V>> .