Come possiamo farlo con Guava? Notare la presenza di List<K>
nel tipo restituito poiché molte chiavi possono essere associate allo stesso valore in qualsiasi mappa normale.Come fare l'inversione della mappa con Guava con valori non univoci?
public static <K, V> Map<V, List<K>> inverse(Map<K, V> map){
Map<V, List<K>> result = new LinkedHashMap<V, List<K>>();
for (Map.Entry<K, V> entry : map.entrySet()) {
if(!result.containsKey(entry.getValue())){
result.put(entry.getValue(), new ArrayList<K>());
}
result.get(entry.getValue()).add(entry.getKey());
}
return result;
}
BiMap
sembra insistere sulla unicità dei valori, ma non hanno questo lusso.
Bello, è stato veloce. – lacroix1547
Ma è fastidioso essere costretto a convertire in Multimap. E considerando lo sforzo che hanno messo sulle prestazioni, potrebbe essere migliorato in futuro, con qualcosa di più sexy. – lacroix1547
@ lacroix1547 Eh? 'Multimaps.forMap()' restituisce _view_ della mappa data. Non fa quasi nessun lavoro ... chiama solo un costruttore e assegna la mappa a un campo. Questo è tutto. Consideralo un adattatore che ti permette di usare una mappa con metodi come 'invertFrom()' che si aspettano un 'Multimap'. – ColinD