如何使用Java 8添加HashMap中包含的BigDecimals?

时间:2015-03-02 20:04:39

标签: java java-8 bigdecimal

在Java 8中添加到HashMap中包含的BigDecimal的最简单方法是什么?

1 个答案:

答案 0 :(得分:10)

在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"));
}

但是,使用merge()函数,Java 8使这更容易,更不容易出错:

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"));
}

Java 8方法的优点:

  1. 无需初始化原始值(BigDecimal.ZERO
  2. 无需引用旧值(HashMap::get)并添加
  3. 很干净