发布于 2017-02-21 16:37:39
您可以只使用在Map中引入的新的java-8 api 合并。
Map<String, BigDecimal> counts = new HashMap<>();
counts.merge("sugar", BigDecimal.valueOf(2.3), BigDecimal::add);
counts.merge("salt", BigDecimal.valueOf(4.5), BigDecimal::add);
counts.merge("pepper", BigDecimal.valueOf(1.8), BigDecimal::add);
counts.merge("sugar", BigDecimal.valueOf(1.4), BigDecimal::add);
System.out.println(counts); // {pepper=1.8, salt=4.5, sugar=3.7}发布于 2017-02-21 16:25:09
那么定制的HashMap呢?想不出更简单的解决方案
在Java 7中:
class Bag extends HashMap<Object, BigDecimal> {
public void add(Object key, BigDecimal value){
if (containsKey(key))
value = get(key).add(value);
put(key, value);
}
}或者,在Java 8中:
class Bag extends HashMap<Object, BigDecimal> {
public void add(Object key, BigDecimal value){
merge(key, value, BigDecimal::add);
}
}用法:
Bag bag = new Bag();
bag.add("Sugar", BigDecimal.valueOf(2.3));
bag.add("Salt", BigDecimal.valueOf(4.5));
bag.add("Sugar", BigDecimal.valueOf(1.4));
System.out.println(bag.get("Sugar")); // Prints 3.7https://stackoverflow.com/questions/42372216
复制相似问题