java - 如何使用具有非唯一值的 Guava 进行 map 反演?

标签 java collections guava

我们如何用 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/

相关文章:

java - 无法使用 Cloud Firestore 写入多个位置

java - 保存到文件,无法读取双重内容

c# - C# 中带有字符串键类型的不区分大小写的字典

Java 集合排序 : Comparison method violates its general contract

java - 如何仅在构造函数中初始化变量一次?

gradle - Protobuf/ Guava 依赖性问题

java - 特定类的异常处理/映射

java - 在 Google Vision API 中使用 Java 时如何修复 "Error: Invalid GCS Path Specified"?

java - Java 中的 OOP 解析方程

java - Java 中的多集交集操作