2013-10-04 39 views
-1

我想不出如何給出正確的問題短語。我有一個具有以下結構的課程。將對象列表轉換爲散列圖

class Obj{ 
private String key; 
private int occ; 

// getter and setter methods 
} 

List<Obj> s = new ArrayList<Obj>(); 

s.add("the",54); 
s.add("the",22); 
s.add("einstein",2); 
s.add("einstein",6); 

我需要通過以下方式獲取HashMap。基本上只需添加對應於值字段的值。

{the=66,einstein=8} 

我想不出如何實現這一點。由於地圖本身將只包含唯一值,所以我不知道如何實現這一點。集合中是否有任何方法或以任何方式實現此目的?對不起,我剛接觸java。

+1

沒有意義。嘗試更好的解釋。 –

+2

「List」中沒有'add(String,int)'API。另外,'Map'的值不需要是唯一的。這是你所指的關鍵。 – GGrec

回答

1

我覺得OP試圖列表轉換成一個HashMap,總結了「OCC」的價值觀對於那些使用相同的密鑰:

HashMap<String, Integer> m = new HashMap<String, Integer>(); 
for (Obj o : s) 
{ 
    Integer i = m.get(o.getKey()); 
    if (i == null) 
    { 
     i = o.getOcc(); 
    } 
    else 
    { 
     i += o.getOcc(); 
    } 

    m.put(o.getKey(), i); 
} 
1

如果你正在嘗試使用的是一個HashMap你要做到這一點是這樣的:

Map<String, Long> map = new HashMap<String, Long>(); 
map.put("the", 54); 

,然後如果你要處理這樣總結他們的重複值:

Long value = map.get("the"); 
map.put("the", value + 22); 

因此,一般來說:

String key = //... 
Long newValue = //... 
Long oldValue = map.get(key); 
if (oldValue != null) { 
    newValue += oldValue; 
} 
map.put(key, newValue);