我们如何用 Guava 做到这一点?注意 List<K>
的存在在返回类型中,因为许多键可以映射到任何法线贴图中的相同值。
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
似乎坚持值(value)观的单一性,但我没有这个奢侈。
最佳答案
你可以这样做:
Map<K, V> map = ...;
ListMultimap<V, K> inverse = Multimaps.invertFrom(Multimaps.forMap(map),
ArrayListMultimap.<V,K>create());
请注意几乎任何时候你写 Map<K, List<V>>
或 Map<K, Set<V>>
或类似的 ListMultimap<K, V>
或 SetMultimap<K, V>
才是你真正想要的。
关于java - 如何使用具有非唯一值的 Guava 进行 map 反演?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678601/