我有一个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中是否有更简单的方法来执行此操作,而不必遍历映射条目并创建一个不存在的set条目,并添加到列表等?我一直认为这很明显,但我无法解决这个问题。
提前致谢
答案 0 :(得分: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())))