2013-10-10 66 views
3

添加到同一個鍵我有如下嘗試:如何將多個值地圖

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>

但我無法取代這個區塊。

回答

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]); 
} 
+0

感謝您的回答。實際上我已經迭代了10k條記錄,這是做這件事的最好方法嗎?或者我們有什麼辦法只是將列表轉換爲無迭代映射? – Suresh

+0

該列表從JPA查詢返回 – Suresh

+0

這是執行此操作的唯一方法。即使你以某種方式從某人處找到第三方庫來完成任務(比如說番石榴的multimap),這就是他們將要做的事情(或者至少,他們會做類似的事情,差異無意義)。另外,10k記錄確實是一個小數字,甚至不是一個挑戰 – StormeHawke

3

Java庫像番石榴和Apache提出,正是這麼做的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);