¿Cómo podemos hacer eso con guayaba? Observe la presencia de List<K>
en el tipo de devolución ya que muchas teclas se pueden asignar al mismo valor en cualquier mapa normal.¿Cómo hacer inversión de mapa con Guava con valores no únicos?
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
parece insistir sobre la unicidad de los valores, pero no tienen este lujo.
Bien, eso fue rápido. – lacroix1547
Pero es molesto ser forzado a convertir a Multimap. Y considerando el esfuerzo que ponen en las actuaciones, se puede mejorar en el futuro, con algo más sexy. – lacroix1547
@ lacroix1547 ¿Huh? 'Multimaps.forMap()' devuelve una _view_ del mapa dado. Casi no funciona ... solo llama a un constructor y asigna el mapa a un campo. Eso es. Considérelo un adaptador que le permite usar un mapa con métodos como 'invertFrom()' que esperan un 'Multimap'. – ColinD