我有一个 Map 是一个值列表的映射,但我需要将其反转,以便
Map<Integer, List<String>>
变成
Map<String, List<Integer>>
例如我有
1 -> { A, B, C }
2 -> { B }
3 -> { A, C }
我想看看
A -> { 1, 3 }
B -> { 1, 2 }
C -> { 1, 3 }
在 Java 8 中是否有比遍历映射条目并创建一个集合条目(如果不存在)并添加到列表等更简单的方法来做到这一点?我一直认为这确实很明显,但我无法解决。
提前致谢
最佳答案
未经测试,但你可以这样做:
mapIntToStrings.entrySet().stream()
.flatMap(entryIntToStrings -> entryIntToStrings.getValue().stream()
.map(str -> new AbstractMap.SimpleEntry<>(entryIntToStrings.getKey(), str)))
.collect(groupingBy(Map.Entry::getValue, mapping(Map.Entry::getKey, toList())))
关于Java 8 将 Map<Integer, List<String>> 转换为 Map<String, List<Integer>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999568/