1

次のようなマップがあるとします

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

そして次のような別のマップ

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

putAll() が一意のキーを追加し、既存のキーを置き換えることを知っています。既存のキーワードがあるたびに値を追加するような結果を生成する両方のマップを追加することは可能ですか。

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

4 に答える 4

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 に答える
0

新しいMapを作成し、のすべてのエントリ xについて、 key が含まれているmap1場合は、 keyを使用して両方の値を新しいマップに追加しますmap2 xx

于 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);
 }

}

ここで、HashMap の代わりに MyMap のオブジェクトを作成します。ここにフィドルを作成しました

于 2013-02-28T13:26:06.903 に答える