2011-07-12 7 views
10

szukam odpowiedniego sposobu na Multimap, iteracyjne nad wpisy z Map, a mianowicie:guava: Najlepszy sposób na iterację nad kluczem-> wpisy kolekcji Multimapa?

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

Które z poniższych stwierdzeń jest lepszy? (Lub być może ważniejsze, jakie są różnice?)

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

lub

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

Odpowiedz

13

Oboje są ważni; Druga wydaje się być dużo łatwiejsza do odczytania (zwłaszcza, że ​​można uzyskać rzeczywistą wartość List z ListMultimap itd.), ale pierwsza może być bardziej wydajna (w stopniu, który może lub nie ma znaczenia dla ciebie).

+0

Czy możesz wyjaśnić, dlaczego pierwsze podejście może być bardziej efektywne? – user482594

3

Powiedziałbym, że ludzie Guava były na tyle taktowny, co pozwala zrobić to tak czy inaczej, w zależności od potrzeb . Na przykład, jeśli struktura jest ważna i chcesz zobaczyć multimap w grupowy sposób, ten drugi będzie preferencyjny. OTOH, jeśli chcesz wyświetlić multimapę jako zestaw par klucz-wartość, gdzie duplikaty kluczy są nieistotne, możesz użyć mmap.entries. To naprawdę jest kwestia tego, co jest najbardziej odpowiednie w kontekście korzystania z multimapy.

+1

Właściwie nie sądzę, że to rozróżnienie, o które OP opowiada. –

Powiązane problemy