Java 8转换地图<;整数,列表<;字符串>&燃气轮机;映射<;字符串,列表<;整数>&燃气轮机;具有

Java 8转换地图<;整数,列表<;字符串>&燃气轮机;映射<;字符串,列表<;整数>&燃气轮机;具有,java,lambda,java-8,Java,Lambda,Java 8,我有一个映射,它是一个值列表的映射,但我需要将它反转,以便 Map<Integer, List<String>> 我想看看 A -> { 1, 3 } B -> { 1, 2 } C -> { 1, 3 } 在Java8中,有没有比遍历映射条目、创建一个集合条目(如果它不存在)并添加到列表等更简单的方法呢?我一直认为这是非常明显的,但我无法解决它 提前感谢您未经测试,但您可以这样做: mapIntToStrings.entrySet().strea

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

Map<Integer, List<String>> 
我想看看

A -> { 1, 3 }
B -> { 1, 2 }
C -> { 1, 3 }
在Java8中,有没有比遍历映射条目、创建一个集合条目(如果它不存在)并添加到列表等更简单的方法呢?我一直认为这是非常明显的,但我无法解决它


提前感谢您未经测试,但您可以这样做:

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())))
MapintToString.entrySet().stream()
.flatMap(EntryIntToString->EntryIntToString.getValue().stream())
.map(str->new AbstractMap.SimpleEntry(entryIntToString.getKey(),str)))
.collect(分组方式(Map.Entry::getValue,映射(Map.Entry::getKey,toList()))

什么是
entryIntToStrings
?@Andreas哎呀,修正了,这是lambda的参数。这将是关于链接dup问题的一个很好的答案。只是说:“:-)谢谢你。我错过了抽象地图。那么近,但又那么远……:)当然,可能是dup,但它为列出的问题提供了一个很好的Java8更新。也许我们尊敬的Wasserman先生愿意在链接的dup上提供他的答案?@ErickG.Hagstrom我已经有了关于这个问题的答案;)我想我可以对它进行编辑以添加另一个副本。感谢指向副本的指针-主要是因为我决定让它与Java 8一起工作,下面的答案符合要求。@LouisWasserman我认为这将是一个很好的编辑。您现有的答案当时非常好,仍然有效,但在我看来,为Java8进行更新是值得的(特别是因为这不是我的努力;)
A -> { 1, 3 }
B -> { 1, 2 }
C -> { 1, 3 }
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())))