如何使用 Java 8 流基于另外两个 map 构建 map ?也就是说,我有以下 map 结构:
map1 = Map<MyModel, List<String>>();
map2 = Map<String, String>();
哪里List<String>
map1
的值与 String
相同输入map2
。换句话说基于 map1 values
可以将其用作 keys
在map2
并得到values
从那里开始。
所以,我的问题是如何使用流和 lambda 技术合并这两个映射,并构建一个新映射,其中将包含 MyModel as keys
和List<Strings> as values
没有重复项?
这是我到目前为止所拥有的:
map1 = Map<MyModel, List<String>>();
map2 = Map<String, String>();
Map<MyModel, List<String>> map3 = Stream.of(map1, map2)
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(v1, v2) -> v1
)
);
如有任何帮助,我们将不胜感激。
最佳答案
让我们从改造 List<String> list
开始通过查找值形式 map2
并丢弃重复项:
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
.....
list.stream()
.filter(map2::containsKey) // make sure map2 has this key
.map(map2::get) // get the value
.distinct() // discard duplicates
.collect(toList()); // make new list
现在您只需使用上面的值映射器(静态导入 Collectors
方法)来解决您的问题:
map1.entrySet().stream().collect(toMap(
Map.Entry::getKey,
e -> e.getValue().stream()
.filter(map2::containsKey)
.map(map2::get)
.distinct()
.collect(toList())
));
关于lambda - 基于 Java 中的另外两个 map 创建 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51252668/