下面我有两个独立的地图,我已经存储在各个地图中,我想添加它们 进入第三个最终地图,所以最终地图将包含名为m1和m2的地图总和, 请告知如何实现相同的
select item,
sum(case when gender = 'M' then n else 0 end) / sum(n) as male_ratio
from t
group by item;
答案 0 :(得分:2)
在Java 7中,您可以在合并的地图中添加第一张地图的所有条目 然后在第二个映射上迭代以添加条目(因为密钥不存在)并在合并的映射中更新条目(因为密钥已经存在)。
Map<String, List<NTM>> mergedMap = new HashMap<>();
mergedMap.putAll(m1);
for (Entry<String, List<NTM>> entry : m2.entrySet()) {
String key = entry.getKey();
List<NTM> list = entry.getValue();
List<NTM> mergedList = mergedMap.get(key);
// key not existing in the mergedMap
if (mergedList == null) {
mergedMap.put(key, list);
}
// key existing in the mergedMap
else {
mergedList.addAll(list);
}
}
使用Java 8,您可以使用Collectors.toMap()
提供合并函数,合并List
NTM
,因为您的地图中有重复的键:
Map<String, List<NTM>> mergedMap = Stream.of(m1.entrySet(), m2.entrySet())
.flatMap(Collection::stream)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue, (v1, v2) -> {
v1.addAll(v2);
return v1;
}));
请注意,合并功能会更改list
引用的地图的原始v1
如果不合适,您可以创建一个新的ArrayList
并将其返回,如:
.collect(Collectors.toMap(Entry::getKey, Entry::getValue, (v1, v2) -> {
List<NTM> mergedList = new
ArrayList<>(v1);
mergedList.addAll(v2);
return mergedList;
}));
答案 1 :(得分:0)
Map<String, List<NTM>> map3 = new HashMap<>();
map3.putAll(map1);
map3.putAll(map2);