我有一个LinkedHashMap,其中有两个重复的键及其对应的值,我需要知道如何将这些值合并为一个键。目前,他消除了旧的重复值,并将新的值
这是我的地图
static Map<String, Double> costByDuration = new LinkedHashMap<>();
这是我放置值的地方(call_from可以是912345678并且值为10,然后是另一个来自912345678的值并且值为20),然后我希望912345678的值为30而不是仅保留之一。
costByDuration.put(call_from, toPay);
答案 0 :(得分:7)
我按如下方式创建方法:
public void put(String key, Double value){
costByDuration.merge(key,value , Double::sum);
}
然后用例将是:
put(call_from, toPay);
put(anotherKey, anotherValue);
...
...
此解决方案在内部使用merge
方法,该方法基本上表示如果指定的键尚未与值关联或与null关联,则将其与给定的非空值相关联。否则,将相关值替换为给定重映射函数的结果。
答案 1 :(得分:3)
使用merge功能:
costByDuration.merge(call_from, toPay, (oldPay, toPay) -> oldPay + toPay);
答案 2 :(得分:3)
您必须先检查您的值是否已在地图中。
Double existingValue = costByDuration.get(callFrom);
if (existingValue != null) {
costByDuration.put(callFrom, existingValue + toPay);
} else {
costByDuration.put(callFrom, toPay);
}
顺便说一句,如果您希望算术运算能够给出正确的答案,那么使用Double
存储一定数量的金钱是一个坏主意。我强烈建议您使用BigDecimal
代替Double
。
答案 3 :(得分:0)
使用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);
}