2011-07-12 9 views
10

私はつまり、Mapのエントリを反復するために、Multimapため、対応する方法を探しています:優れている、以下のguava:Multimapのkey-> collectionエントリを反復処理する最良の方法は?

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

? (または、おそらくもっと重要なのは、違いは何ですか?)

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

または

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

答えて

13

両方とも有効です。 2番目のほうが読みやすくなります(特に、の中から実際にListを取得できるようになる)が、最初のほうが効率的であるかもしれません(あなたにとって重要でないかもしれません)。

+0

最初のアプローチがより効率的な理由を説明できますか? – user482594

3

私はグアバの人々があなたのニーズに応じて、あなたはそれをいずれかの方法を行うことができるように十分配慮したと言うでしょう。たとえば、構造体が重要であり、グループ化された方法でマルチマップを表示する場合は、後者が優先されます。 OTOHでは、マルチマップを重複キーが重要でないキーと値のペアのセットとして表示する場合は、mmap.entriesを使用することをお勧めします。実際には、マルチマップが使用されている状況で最も適切なものの問題です。

+1

実際、私は、OPが求めているのはそれが違いだとは思わない。 –

関連する問題