如何将 HashMap 中包含的 BigDecimals 与 Java 8 相加?
How do I add up BigDecimals contained in a HashMap with Java 8?
添加到 Java 8 中的 HashMap 中包含的 BigDecimal 的最简单方法是什么?
在 Java 8 之前,它将是:
public static void main(String[] args) {
HashMap<String, BigDecimal> bd_map = new HashMap<>();
bd_map.put("Shirts", BigDecimal.ZERO);
bd_map.put("Hats", BigDecimal.ZERO);
bd_map.put("Shoes", BigDecimal.ZERO);
bd_map.put("Shirts", bd_map.get("Shirts").add(new BigDecimal("5.99")));
bd_map.put("Shirts", bd_map.get("Shirts").add(new BigDecimal("4.50")));
bd_map.put("Shoes", bd_map.get("Shoes").add(new BigDecimal("15.99")));
bd_map.put("Hats", bd_map.get("Hats").add(new BigDecimal("8.00")));
bd_map.put("Shirts", bd_map.get("Shirts").add(new BigDecimal("8.99")));
bd_map.put("Shoes", bd_map.get("Shoes").add(new BigDecimal("22.00")));
bd_map.put("Hats", bd_map.get("Hats").add(new BigDecimal("7.00")));
System.out.println("Shirts: " + bd_map.get("Shirts"));
System.out.println("Hats: " + bd_map.get("Hats"));
System.out.println("Shoes: " + bd_map.get("Shoes"));
}
但是,Java 8 使用 merge()
函数使这变得更容易并且更不容易出错:
public static void main(String[] args) {
HashMap<String, BigDecimal> bd_map = new HashMap<>();
bd_map.merge("Shirts", new BigDecimal("5.99"), BigDecimal::add);
bd_map.merge("Shirts", new BigDecimal("4.50"), BigDecimal::add);
bd_map.merge("Shoes", new BigDecimal("15.99"), BigDecimal::add);
bd_map.merge("Hats", new BigDecimal("8.00"), BigDecimal::add);
bd_map.merge("Shirts", new BigDecimal("8.99"), BigDecimal::add);
bd_map.merge("Shoes", new BigDecimal("22.00"), BigDecimal::add);
bd_map.merge("Hats", new BigDecimal("7.00"), BigDecimal::add);
System.out.println("Shirts: " + bd_map.get("Shirts"));
System.out.println("Hats: " + bd_map.get("Hats"));
System.out.println("Shoes: " + bd_map.get("Shoes"));
}
Java8 方法的优点:
- 无需初始化原值(
BigDecimal.ZERO
)
- 无需参考旧值(
HashMap::get
)并添加它
- 很干净
添加到 Java 8 中的 HashMap 中包含的 BigDecimal 的最简单方法是什么?
在 Java 8 之前,它将是:
public static void main(String[] args) {
HashMap<String, BigDecimal> bd_map = new HashMap<>();
bd_map.put("Shirts", BigDecimal.ZERO);
bd_map.put("Hats", BigDecimal.ZERO);
bd_map.put("Shoes", BigDecimal.ZERO);
bd_map.put("Shirts", bd_map.get("Shirts").add(new BigDecimal("5.99")));
bd_map.put("Shirts", bd_map.get("Shirts").add(new BigDecimal("4.50")));
bd_map.put("Shoes", bd_map.get("Shoes").add(new BigDecimal("15.99")));
bd_map.put("Hats", bd_map.get("Hats").add(new BigDecimal("8.00")));
bd_map.put("Shirts", bd_map.get("Shirts").add(new BigDecimal("8.99")));
bd_map.put("Shoes", bd_map.get("Shoes").add(new BigDecimal("22.00")));
bd_map.put("Hats", bd_map.get("Hats").add(new BigDecimal("7.00")));
System.out.println("Shirts: " + bd_map.get("Shirts"));
System.out.println("Hats: " + bd_map.get("Hats"));
System.out.println("Shoes: " + bd_map.get("Shoes"));
}
但是,Java 8 使用 merge()
函数使这变得更容易并且更不容易出错:
public static void main(String[] args) {
HashMap<String, BigDecimal> bd_map = new HashMap<>();
bd_map.merge("Shirts", new BigDecimal("5.99"), BigDecimal::add);
bd_map.merge("Shirts", new BigDecimal("4.50"), BigDecimal::add);
bd_map.merge("Shoes", new BigDecimal("15.99"), BigDecimal::add);
bd_map.merge("Hats", new BigDecimal("8.00"), BigDecimal::add);
bd_map.merge("Shirts", new BigDecimal("8.99"), BigDecimal::add);
bd_map.merge("Shoes", new BigDecimal("22.00"), BigDecimal::add);
bd_map.merge("Hats", new BigDecimal("7.00"), BigDecimal::add);
System.out.println("Shirts: " + bd_map.get("Shirts"));
System.out.println("Hats: " + bd_map.get("Hats"));
System.out.println("Shoes: " + bd_map.get("Shoes"));
}
Java8 方法的优点:
- 无需初始化原值(
BigDecimal.ZERO
) - 无需参考旧值(
HashMap::get
)并添加它 - 很干净