1

说我有一张像

{one=1; two=1; three=1}

和另一张地图

{one=4; two=4; three=4}

我知道 putAll() 会添加唯一键并替换现有键。是否可以添加两个地图,这会产生一个结果,例如只要存在现有关键字就添加值。

{one=5; two=5; three=5}
4

4 回答 4

0

创建一个Map的,然后对于其中的所有条目 xmap1如果map2 包含 key x则将两个值的添加放入带有 key 的新映射中x

于 2013-02-28T13:20:15.820 回答
0

试试这个 ,

             Map<String, Integer> map = new HashMap<String, Integer>();
    Map<String, Integer> map1 = new HashMap<String, Integer>();
             Map<String, Integer> map2 = new HashMap<String, Integer>();

    map.put("one", 1);
    map.put("two", 1);
    map.put("three", 1);

    map1.put("one", 4);
    map1.put("two", 4);
    map1.put("three", 4);


    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        System.out.println(map1.get(entry.getKey())+entry.getValue());
                        map2.put(entry.getKey(),map1.get(entry.getKey())+entry.getValue());
    }
于 2013-02-28T13:25:47.103 回答
0

扩展HashMap并覆盖 putAll 方法。

public class MyMap extends java.util.HashMap{
 @Override
 public void putAll(java.util.Map mapToAdd){
      java.util.Iterator iterKeys = keySet().iterator();
      while(iterKeys.hasNext()){
           String currentKey = (String)iterKeys.next();
           if(mapToAdd.containsKey(currentKey)){
                mapToAdd.put(currentKey, new Integer(Integer.parseInt(get(currentKey).toString()) + Integer.parseInt(mapToAdd.get(currentKey).toString())));
           }else{
                mapToAdd.put(currentKey, get(currentKey));
           }
      }
      super.putAll(mapToAdd);
 }
 public static void main(String args[]){
     MyMap m1 = new MyMap();
     m1.put("One", new Integer(1));
     m1.put("Two", new Integer(2));
     m1.put("Three", new Integer(3));
     MyMap m2 = new MyMap();
     m2.put("One", new Integer(4));
     m2.put("Two", new Integer(5));
     m2.put("Three", new Integer(6));
     m1.putAll(m2);
     System.out.println(m1);
 }

}

现在,创建 MyMap 的对象而不是 HashMap。在这里创建了一个小提琴

于 2013-02-28T13:26:06.903 回答
0

试试这个方法。适用于通用键类型。Integer在我们添加它们时,值类型仍然存在。

public <K> void putAndAdd(Map<K, Integer> to,
        Map<? extends K, ? extends Integer> from) {
    for (Iterator<? extends Map.Entry<? extends K, ? extends Integer>> i = from
            .entrySet().iterator(); i.hasNext();) {
        Map.Entry<? extends K, ? extends Integer> e = i.next();
        if (to.get(e.getKey()) != null) {
            to.put(e.getKey(), to.get(e.getKey()) + e.getValue());
        } else {
            to.put(e.getKey(), e.getValue());
        }
    }
}
于 2013-02-28T13:39:45.133 回答