gpt4 book ai didi

java - 使用 Java 8 Lambda 表达式合并映射流

转载 作者:太空狗 更新时间:2023-10-29 22:49:29 26 4
gpt4 key购买 nike

我有两张 map m1m2类型 Map<Integer, String> ,必须合并到一个 map 中 Map<Integer, List<String>> ,其中两个映射中相同键的值被收集到一个列表中并放入一个新的映射中。

基于我所探索的解决方案:

Map<Integer, List<String>> collated =
Stream.concat(m1.entrySet().stream(), m2.entrySet().stream()).collect(
Collectors.toMap(Entry::getKey,
Entry::getValue, (a, b) -> {
List<String> merged = new ArrayList<String>(a);
merged.addAll(b);
return merged;
}));

但是,此解决方案需要来源 List成为Map<Integer, List<String>>因为 toMap 中的合并函数期望操作数和结果具有相同的类型。

我不想更改源集合。请提供您对使用 lambda 表达式实现此目的的意见。

最佳答案

这是 groupingBy 的工作 Collection 家:

Stream.of(m1,m2)
.flatMap(m->m.entrySet().stream())
.collect(groupingBy(
Map.Entry::getKey,
mapping(Map.Entry::getValue, toList())
));

关于java - 使用 Java 8 Lambda 表达式合并映射流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31488339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com