小编典典

如何使用非唯一值的番石榴进行地图反演?

java

我们如何用番石榴来做到这一点?注意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 似乎坚持价值观的统一性,但我没有这种奢侈。


阅读 211

收藏
2020-09-26

共1个答案

小编典典

你可以这样做:

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>>类似内容时,a ListMultimap<K, V>或a
SetMultimap<K, V>都是您真正想要的。

2020-09-26