【发布时间】:2015-10-07 21:55:37
【问题描述】:
我有两个类型为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 表达式实现此目的的意见。
【问题讨论】:
标签: java dictionary lambda java-8 java-stream