如何在LinkedHashMap中对重复的键值求和?



我有一个LinkedHashMap,其中我有两个重复的键及其对应的值,我需要知道如何将这些值求和为一个键。目前,他消除了旧的重复值并放置了新值

这是我的地图

static Map<String, Double> costByDuration = new LinkedHashMap<>();

这是我放置值的地方(call_from可以912345678并且值为 10,然后来自 912345678 的另一个调用并且值为 20(,然后我希望912345678的值为 30 而不是只保留一个。

costByDuration.put(call_from, toPay);

我会创建一个方法,如下所示:

public void put(String key, Double value){
costByDuration.merge(key,value , Double::sum);
}

那么用例将是:

put(call_from, toPay);
put(anotherKey, anotherValue);
...
...

该解决方案在内部使用merge方法,该方法基本上表示如果指定的键尚未与值关联或与 null 关联,则将其与给定的非 null 值相关联。否则,将关联的值替换为给定重映射函数的结果。

您必须先检查您的值是否已在映射中。

Double existingValue = costByDuration.get(callFrom);
if (existingValue != null) {
costByDuration.put(callFrom, existingValue + toPay);
}  else {
costByDuration.put(callFrom, toPay);
}

顺便说一下,如果你想让你的算术运算给你正确的答案,使用Double来存储一定数量的钱是一个坏主意。 我强烈建议使用BigDecimal代替Double.

使用合并功能:

costByDuration.merge(call_from, toPay, (oldPay, toPay) -> oldPay + toPay);

使用 containsKey 方法试试这个:

static Map<String, Double> costByDuration = new LinkedHashMap<>();
if(costByDuration.containsKey(call_from) { 
costByDuration.put(call_from, map.get(call_from) + to_Pay);
} else {
costByDuration.put(call_from, to_Pay);
}

相关内容

  • 没有找到相关文章

最新更新