使用 Java 8 Lambda 表达式合并映射流
2022-09-03 09:15:31
我有两个映射和类型,它们必须合并成一个映射,其中两个映射中相同键的值被收集到一个列表中并放入一个新的Map中。m1
m2
Map<Integer, String>
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;
}));
但是,此解决方案期望源,因为 toMap 中的合并函数期望操作数和结果属于同一类型。List
Map<Integer, List<String>>
我不想更改源集合。请提供您关于使用 lambda 表达式实现此目的的意见。