HashMap group by(Java)

时间:2012-10-20 17:50:52

标签: java hashmap

是否有一种方法可以按键进行分组,并在Java中的HashMap中添加值

    HashMap<String, Integer> map = new HashMap<String, Integer>();

    map.put("A", 2);
    map.put("A", 3);
    map.put("B", 4);
    map.put("A", 5);
    map.put("B", 4);    

结果是

   A = 10
   B = 8

任何帮助都会有所帮助!!!

5 个答案:

答案 0 :(得分:5)

这样的事情应该有效:

public void incrementValue(HashMap<String, Integer> map, String key, int value) {
    Integer old = map.get(key);
    if (old == null) {
        map.put(key, value);
    } else {
        map.put(key, value + old);
    }
}

答案 1 :(得分:4)

执行此操作的写实用程序方法:

Map<String, Integer> map = new HashMap<>();
.........
public void putAndIncrement(String key, int value) {
    Integer prev = map.get(key);
    Integer newValue = value;
    if (prev != null) {
        newValue += prev.intValue();
    }
    map.put(newValue);
}

答案 2 :(得分:3)

您不应该使用散列图。

map.put("A", 2);
map.put("A", 3);

第二次改写覆盖了第一次。使用列表。循环通过它并自己添加。

答案 3 :(得分:2)

您可以这样分组

HashMap<String, ArrayList<Integer>>

每当您看到A继续将值添加到其ArrayList

中时

答案 4 :(得分:0)

请参阅Java algorithm to track parts of aggregated values上的回答:

private static class MutableValue {
    double value;
    public MutableValue(double value) {
        this.value = value;
    }
    public void add(double value) {
        this.value += value;
    }
}

MutableValue value = sourceNameMap.get(ticketId);
if (oldValue == null) {
    sourceNameMap.put(new MutableValue(entryValue));
} else {
    value.add(entryValue);
}