How about a custom hashmap? Can't think of a simpler solution.
In 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); } }
Or, in Java 8:
class Bag extends HashMap<Object, BigDecimal> { public void add(Object key, BigDecimal value){ merge(key, value, BigDecimal::add); } }
Using:
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"));
source share