Recuperare una chiave ArrayListMultimap
-
20-09-2019 - |
Domanda
sto usando di Guava collezione ArrayListMultimap<K,V>
mappare Integers
a Strings
. La classe fornisce un metodo chiamato containsValue(Object value)
che controlla se il Multimap contiene il valore specificato per un qualsiasi tasto. Una volta che determino che è vero, qual è il modo migliore per recuperare detto chiave?
ArrayListMultimap<String, Integer> myMap = ArrayListMultimap.create();
if (myMap.containsValue(new Integer(1))
{
// retrieve the key?
}
Soluzione
Invece di usare containsValue
si potrebbe iterare su myMap.entries () che restituisce un insieme di tutte le coppie chiave-valore. L'iteratore generata dalla collezione restituita attraversa i valori per una chiave, seguito dai valori di una seconda chiave, e così via:
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
Se si guarda alla realizzazione di containsValue
esso diventa subito itera oltre i valori della mappa così le prestazioni di fare questo con map.entries()
invece di map.values()
dovrebbe essere circa lo stesso.
public boolean containsValue(@Nullable Object value) {
for (Collection<V> collection : map.values()) {
if (collection.contains(value)) {
return true;
}
}
return false;
}
Nel caso generale, naturalmente, non v'è necessariamente una chiave unica per un dato valore in modo meno che non si sa che nella mappa ogni valore si verifica solo nei confronti di un singolo tasto si avrebbe bisogno di specificare il comportamento per esempio se si voleva la prima chiave chiave o l'ultima.