Java 8将Map <Integer,List >转换为Map <String,List > with

我有一个Map是一个值列表的映射,但我需要反转它以便

Map<Integer, List> 

 Map<String, List> 

比如我有

 1 -> { A, B, C } 2 -> { B } 3 -> { A, C } 

而且我想看

 A -> { 1, 3 } B -> { 1, 2 } C -> { 1, 3 } 

在Java 8中是否有更简单的方法来执行此操作,而不是迭代遍历映射条目并创建一个不存在的set条目,并添加到列表等? 我一直认为这很明显,但我无法解决这个问题。

提前致谢

未经测试,但您可以这样做:

 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())))