-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。基本上只需添加与 value 字段对应的值。

{the=66,einstein=8}

我不知道如何实现这一点。由于地图本身将仅包含唯一值,因此我不确定如何实现这一点。Collections 中是否有任何方法或任何方法可以实现此目的?抱歉,我是 Java 新手。

4

2 回答 2

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); 
}
于 2013-10-04T22:29:10.707 回答
1

如果您尝试使用的是哈希图,您应该这样做:

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);
于 2013-10-04T22:29:28.780 回答