3

Is there a way we can group by Key and add the value in a HashMap in Java

    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);    

The result is

   A = 10
   B = 8

Any help would be helpful !!!

4

5 回答 5

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);
    }
}
于 2012-10-20T17:56:52.283 回答
4

Write utility method that does this:

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);
}
于 2012-10-20T17:57:21.010 回答
3

你不应该使用哈希图。

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

第二个 put 会覆盖第一个 put。使用列表。循环遍历它并自己进行添加。

于 2012-10-20T17:55:12.880 回答
2

可以这样分组

HashMap<String, ArrayList<Integer>>

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

于 2012-10-20T17:54:27.390 回答
0

请参阅有关 Java 算法的答案以跟踪部分聚合值

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);
}
于 2012-10-20T18:00:02.877 回答