将对象列表转换为hashmap

时间:2013-10-04 22:17:53

标签: java hashmap

我想不出如何给出一个正确的问题短语。我有一个具有以下结构的课程。

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的新手。

2 个答案:

答案 0 :(得分: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 :(得分: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);