有两个Map<Integer,Integer> ,key是渠道号,value是统计数
我想将两个map中的key(也就是渠道号)相同的统计数分别相加,最后保存在一个Map<Integer,Integer>里。这是我工作的一个实际的问题,弄了半天没解决,哪位高手指点一下,谢谢了啊。

解决方案 »

  1.   

    Map<Integer, Integer> map=new HashMap<Integer, Integer>();
    map.put(new Integer(0), new Integer(100));
    map.put(new Integer(1), new Integer(101));
    map.put(new Integer(2), new Integer(102));
    Map<Integer, Integer> amap=new HashMap<Integer, Integer>();
    amap.put(new Integer(0), new Integer(200));
    amap.put(new Integer(5), new Integer(300));
    Set<Integer> set=map.keySet();
    Iterator<Integer> it=set.iterator();
    while(it.hasNext()){
    Integer tem=it.next();
    if(amap.containsKey(tem)){
    amap.put(tem, new Integer(amap.get(tem).intValue()+map.get(tem).intValue()));
    }
    }
    map.putAll(amap);
    System.out.println(map);
    打印结果:
    {2=102, 1=101, 5=300, 0=300}
    看一下,0=300 其于的没变,也合到一起了(注:我用了泛型,JDK1.5以上支持,不知道你的JDK版本)
      

  2.   


    public class Test {
    public static void main(String[] args) {
    Map<Integer,Integer> map1 = new HashMap<Integer,Integer>();
    map1.put(new Integer(1), new Integer(3));
    map1.put(new Integer(3), new Integer(3));
    map1.put(new Integer(5), new Integer(3));

    Map<Integer,Integer> map2 = new HashMap<Integer,Integer>();
    map2.put(new Integer(4), new Integer(3));
    map2.put(new Integer(5), new Integer(3));
    map2.put(new Integer(9), new Integer(3));

    for(Integer key1 : map1.keySet()){
    System.out.println(key1);
    for(Integer key2 : map2.keySet()){
    System.out.println(key2);
    if(key1.intValue() == key2.intValue()){
    map1.put(key1, map1.get(key1)+map2.get(key2));
    map2.remove(key2);
    }
    }
    }
    map1.putAll(map2);

    for(Integer key1 : map1.keySet()){
    System.out.println(key1 +" : "+map1.get(key1));
    }
    }
    }
      

  3.   

    根据2楼的提示,稍改动了一下:
    public class Test {
    public static void main(String[] args) {
    Map<Integer,Integer> map1 = new HashMap<Integer,Integer>();
    map1.put(new Integer(1), new Integer(3));
    map1.put(new Integer(3), new Integer(3));
    map1.put(new Integer(5), new Integer(3));

    Map<Integer,Integer> map2 = new HashMap<Integer,Integer>();
    map2.put(new Integer(4), new Integer(3));
    map2.put(new Integer(5), new Integer(3));
    map2.put(new Integer(9), new Integer(3));

    for(Integer key1 : map1.keySet()){
    if(map2.containsKey(key1)){
    map1.put(key1, map1.get(key1)+map2.get(key1));
    map2.remove(key1);
    }
    }
    map1.putAll(map2);

    for(Integer key1 : map1.keySet()){
    System.out.println(key1 +" : "+map1.get(key1));
    }
    }
    }
      

  4.   

    可以啊,只不过Map,List,Set内部都重构了toString()方法,所以不用再用for循环去遍例,直接System.out.println就可以了