有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中用stream()将Map<v1,Set<v2>>转换为Map<v2,Set<v1>>

我有一个映射对象Map<t1, Set<t2>>,我想进入集合,将集合中的t2转换为新映射的键。原始键t1将是映射的新值
例如,给定一个包含两个条目的映射

{key1: [a, b, c], key2: [c, d]}

最终的地图将是

{a: [key1], b: [key1], c: [key1, key2], d: [key2]}

[]表示上述示例中的集合


共 (1) 个答案

  1. # 1 楼答案

    一种方法可能是——

    Map<V1,Set<V2>> inputHashMap = new HashMap<>(); // initialized with your input
    Map<V2,Set<V1>> outputHashMap = new HashMap<>();
    
    inputHashMap.forEach((val, keys) -> keys.forEach(key -> {
        if (outputHashMap.containsKey(key)) {
            outputHashMap.get(key).add(val);
        } else {
            outputHashMap.put(key, new HashSet<>() {{
                add(val);
            }});
        }
    }));