2011-07-12 9 views
10

Busco la manera correspondiente, para Multimap, para iterar sobre las entradas de un Map, a saber:guayaba: ¿la mejor manera de iterar sobre las entradas de la colección clave-> de un Multimap?

Map<K,V> map = ...; 
for (Map.Entry<K,V> entry : map.entrySet()) 
{ 
    K k = entry.getKey(); 
    V v = entry.getValue(); 
} 

¿Cuál de los siguientes es mejor? (O tal vez más importante, ¿cuáles son las diferencias?)

Multimap<K,V> mmap = ...; 
for (Map.Entry<K,Collection<V>> entry : mmap.asMap().entrySet()) 
{ 
    K k = entry.getKey(); 
    Collection<V> v = entry.getValue(); 
} 

o

Multimap<K,V> mmap = ...; 
for (K k : mmap.keySet()) 
{ 
    Collection<V> v = mmap.get(k); 
} 

Respuesta

13

Ambos son válidos; el segundo tiende a ser mucho más fácil de leer (especialmente si puede obtener un List real de un ListMultimap y así sucesivamente), pero el primero podría ser más eficiente (en un grado que puede o no ser importante para usted).

+0

¿Podría explicar por qué el primer enfoque podría ser más eficiente? – user482594

3

Yo diría que la gente de guayaba eran lo suficientemente considerado como para permitir que lo haga de cualquier manera, en función de sus necesidades . Por ejemplo, si la estructura es importante y desea ver su multimapa de manera agrupada, esta última sería preferencial. OTOH, si desea ver el multimapa como un conjunto de pares clave-valor, donde las claves duplicadas son insignificantes, puede preferir usar mmap.entries. En realidad, es una cuestión de lo que es más apropiado en el contexto en que se usa su multimapa.

+1

En realidad, no creo que esa sea la distinción sobre la que el OP pregunta. –

Cuestiones relacionadas