HashMap #merge()

497 阅读1分钟

merge()出处

  • Map 接口中 的default 函数#
private static void test_One() {
    HashMap<String, Integer> prices = new HashMap<>();
    prices.put("Shoes", 100);
    prices.put("Bag", 230);
    prices.put("Pant", 330);

    System.out.println("prices : " + prices);
    Integer shirt = prices.merge("shirt", 90, new BiFunction<Integer, Integer, Integer>() {
        @Override
        public Integer apply(Integer integer, Integer integer2) {
            return integer + integer2;
        }
    });
    System.out.println(" shirt : " + shirt);
    System.out.println(" update 以后的 prices:" + prices);
}
  • 打印结果
  1. prices : {Pant=330, Bag=230, Shoes=100}
  2. shirt : 90
  3. update 以后的 prices:{Pant=330, shirt=90, Bag=230, Shoes=100}
  • 可见当在 map 中插入一个不存在的key 和 value 时,BiFunction#apply并未起到什么作用,个人觉得和 put() 操作没啥区别

再测

  • 对 map 中已经有的 key 执行 merge 操作
private static void  test_two () {
   HashMap<String, Integer> prices = new HashMap<>();
   prices.put("Shoes", 100);
   prices.put("Bag", 230);
   prices.put("Pant", 330);

   System.out.println(" old prices : " + prices);

   // 注意,”Pant" 在 map 中已经存在了;
   Integer newPant = prices.merge("Pant", 90, new BiFunction<Integer, Integer, Integer>() {
       @Override
       public Integer apply(Integer integer, Integer integer2) {
            // integer 是以前 put进去的值:330;integer2 是merge 进去的值,
           System.out.println("         integer : "+integer+", integer2 : "+integer2);
           return integer + integer2;
       }
   });
   System.out.println(" newPant : " + newPant);
   System.out.println(" updated prices:" + prices);
}
  • 打印结果
  1. old prices : {Pant=330, Bag=230, Shoes=100}
  2. integer : 330, integer2 : 90
  3. newPant : 420
  4. updated prices:{Pant=420, Bag=230, Shoes=100}
  • 可以见 Pant 最后的值是:integer + integer2 =》330+90= 420,apply()函数就是对integer和integer1 做一些定制化的操作,譬如:加减乘除....

最后

  • 谢谢菜鸟,好网站
  • 少见自然多怪,都是小场面....
  • 谢谢 leetcode 169,若不是刷算法,还真不知道,map 还有这个操作;