ArrayListMultimap キーの取得
-
20-09-2019 - |
質問
グアバを使っています ArrayListMultimap<K,V>
コレクションからマップへ Integers
に Strings
. 。このクラスは次のメソッドを提供します。 containsValue(Object value)
これは、マルチマップにキーの指定された値が含まれているかどうかを確認します。それが真実であると判断したら、そのキーを取得する最善の方法は何でしょうか?
ArrayListMultimap<String, Integer> myMap = ArrayListMultimap.create();
if (myMap.containsValue(new Integer(1))
{
// retrieve the key?
}
解決
使用する代わりに containsValue
繰り返すことができます myMap.entries() すべてのキーと値のペアのコレクションを返します。返されたコレクションによって生成された反復子は、1 つのキーの値を走査し、続いて 2 番目のキーの値を走査します。
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
の実装を見てみると、 containsValue
マップの値を反復処理するだけなので、これを実行するパフォーマンスは map.entries()
の代わりに map.values()
ほぼ同じはずです。
public boolean containsValue(@Nullable Object value) {
for (Collection<V> collection : map.values()) {
if (collection.contains(value)) {
return true;
}
}
return false;
}
もちろん、一般的なケースでは、特定の値に必ずしも一意のキーがあるとは限りません。そのため、マップ内の各値が単一のキーに対してのみ発生することがわかっている場合を除き、動作を指定する必要があります。最初のキーまたは最後のキーが必要な場合。
所属していません StackOverflow