2009-09-01 23 views
2

GuavaのArrayListMultimap<K,V>コレクションを使用してIntegersからStringsにマップしています。このクラスは、containsValue(Object value)というメソッドを提供します。このメソッドは、Multimapに任意のキーに指定された値が含まれているかどうかをチェックします。それが真であると判断したら、その鍵を取り出す最良の方法は何ですか?代わりに、あなたはすべてのキーと値のペアのコレクションを返しますmyMap.entries()を反復処理することができcontainsValueを使用してのArrayListMultimapキーを取得する

ArrayListMultimap<String, Integer> myMap = ArrayListMultimap.create(); 

if (myMap.containsValue(new Integer(1)) 
{ 
    // retrieve the key? 
} 

答えて

3

。あなたはそのマップの値よりcontainsValueそれだけ繰り返し処理の実装を見れば

Integer toFind = new Integer(1); 
for (Map.Entry<String, Integer> entry: myMap.entries()) { 
    if (toFind.equals(entry.getValue())) { 
     // entry.getKey() is the first match 
    } 
} 
// handle not found case 

:返されるコレクションによって生成されたイテレータは2番目のキーの値が続くつのキーに対する値、およびを横断しますmap.values()の代わりにmap.entries()でこれを実行すると、ほぼ同じになるはずです。もちろん、一般的なケースでは

public boolean containsValue(@Nullable Object value) { 
    for (Collection<V> collection : map.values()) { 
     if (collection.contains(value)) { 
     return true; 
     } 
    } 

    return false; 
} 

あなたがマップ内の各値は、あなただけは、例えば動作を指定する必要があり、単一のキーに対して発生したことを知っていない限り、指定した値の一意のキーは必ずしもありません最初のキーまたは最後のキーが必要な場合。