合并两张地图的最佳做法是什么?

时间:2014-12-06 18:40:48

标签: java collections map merge iteration

如何将新地图添加到现有地图。地图具有相同的类型Map<String, Integer>。如果新地图中的密钥存在于旧地图中,则应添加值。

Map<String, Integer> oldMap = new TreeMap<>();
Map<String, Integer> newMap = new TreeMap<>();

//Data added

//Now what is the best way to iterate these maps to add the values from both?

2 个答案:

答案 0 :(得分:5)

通过添加,我假设您要添加整数值,而不是创建Map<String, List<Integer>>

在java 7之前,你必须迭代@laune显示(+1给他)。否则使用java 8,Map上有一个合并方法。所以你可以这样做:

Map<String, Integer> oldMap = new TreeMap<>();
Map<String, Integer> newMap = new TreeMap<>();

oldMap.put("1", 10);
oldMap.put("2", 5);
newMap.put("1", 7);

oldMap.forEach((k, v) -> newMap.merge(k, v, (a, b) -> a + b));

System.out.println(newMap); //{1=17, 2=5}

它的作用是,对于每个键值对,它合并键(如果它还没有在newMap中,它只是创建一个新的键值对,否则它会更新之前的值保持现有密钥通过添加两个整数)

也许你应该考虑使用Map<String, Long>来避免在添加两个整数时溢出。

答案 1 :(得分:4)

for( Map.Entry<String,Integer> entry: newMap.entrySet() ) {
    // get key and value from newMap and insert/add to oldMap
    Integer oldVal = oldMap.get( entry.getKey() );
    if( oldVal == null ){
        oldVal = entry.getValue();
    } else {
        oldVal += entry.getValue();
    }
    newMap.put( entry.getKey(), oldVal );
}

希望这就是你的意思