merge()出处
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);
}
- prices : {Pant=330, Bag=230, Shoes=100}
- shirt : 90
- 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);
Integer newPant = prices.merge("Pant", 90, new BiFunction<Integer, Integer, Integer>() {
@Override
public Integer apply(Integer integer, Integer integer2) {
System.out.println(" integer : "+integer+", integer2 : "+integer2);
return integer + integer2;
}
});
System.out.println(" newPant : " + newPant);
System.out.println(" updated prices:" + prices);
}
- old prices : {Pant=330, Bag=230, Shoes=100}
- integer : 330, integer2 : 90
- newPant : 420
- updated prices:{Pant=420, Bag=230, Shoes=100}
- 可以见 Pant 最后的值是:integer + integer2 =》330+90= 420,apply()函数就是对integer和integer1 做一些定制化的操作,譬如:加减乘除....
最后