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

标签 java lambda java-8

我有一个 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/

相关文章:

java - 执行 Java Web App 时未找到类

C# LINQ 转换查询语法扩展

python - 如何在 keras 中使用 lambda 层?

python - 在 lambda 中使用导入函数 - Python

java - Groovy 元类与 Java 8 的互操作性

java - 如何在 Mac 上安装 Java 8

java - 为什么在 Java 的新 Collection 库中牺牲了线程安全?

java - 如何在数据库( hibernate )中计算表中的值?

java8从对象基本条件列表中删除对象

java - 哈希表复制导致空指针