将两个独立的地图合并为第三个地图

时间:2018-06-05 10:36:43

标签: java

下面我有两个独立的地图,我已经存储在各个地图中,我想添加它们 进入第三个最终地图,所以最终地图将包含名为m1和m2的地图总和, 请告知如何实现相同的

select item,
       sum(case when gender = 'M' then n else 0 end) / sum(n) as male_ratio
from t
group by item;

2 个答案:

答案 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);