如何在Map中向同一个键添加多个值

时间:2013-10-10 15:08:38

标签: java

我试过如下:

for (Object[] trials: trialSpecs) {
    Object[] result= (Object[]) trials;
    multiValueMap.put((Integer) result[0], new ArrayList<Integer>());
    multiValueMap.get(result[0]).add((Integer)result[1]);
}

但每次用旧值替换新值时。我知道这是因为我在代码中使用了new ArrayList<Integer>

但是我无法替换这个区块。

2 个答案:

答案 0 :(得分:5)

只有put一个new ArrayList()(如果还不存在):

for (Object[] trials: trialSpecs) { 
    Object[] result= (Object[]) trials; 
    //Check to see if the key is already in the map:
    if(!multiValueMap.containsKey((Integer) result[0]){
        multiValueMap.put((Integer) result[0], new ArrayList()); 
    }
    multiValueMap.get(result[0]).add((Integer)result[1]); 
}

答案 1 :(得分:3)

像Guava和Apache这样的Java库提出了完全符合这一目标的Multimap:

使用guava

Multimap<String, String> mhm = ArrayListMultimap.create();
mhm.put(key, "A");
mhm.put(key, "B");
mhm.put(key, "C");
Collection<String> coll = mhm.get(key);

使用apache

MultiMap mhm = new MultiHashMap();
mhm.put(key, "A");
mhm.put(key, "B");
mhm.put(key, "C");
Collection coll = (Collection) mhm.get(key);