我有一个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);
}