我有两个类型为Map<Integer, String>
的地图m1
和m2
,它们需要合并成一个新的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表达式实现此目标的输入。