🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 1. computeIfAbsent `computeIfAbsent(key, key -> {})` computeIfAbsent() 方法对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hashMap 中。 ~~~ @Test public void testcomputeIfAbsent() { // 创建一个 HashMap HashMap<String, Integer> prices = new HashMap<>(); // 往HashMap中添加映射项 prices.put("Shoes", 200); prices.put("Bag", 300); prices.put("Pant", 150); System.out.println("HashMap: " + prices); // 计算 Shirt 的值,不存在则计算加入 int shirtPrice = prices.computeIfAbsent("Shirt", key -> 280); System.out.println("Price of Shirt: " + shirtPrice); // 输出更新后的HashMap System.out.println("Updated HashMap: " + prices); } ~~~ 结果添加了不存在的key ``` HashMap: {Pant=150, Bag=300, Shoes=200} Price of Shirt: 280 Updated HashMap: {Pant=150, Shirt=280, Bag=300, Shoes=200} ``` # 2.compute `compute(key, (key, value) -> {})` 1. 值不存在则什么都不做 2. 有值就更新计算后的值,并返回 3. 如果值不存在,则函数照应执行,此时value=null,如果对值进行赋值,和 ~~~ /** * 对key对应的value进行计算,并重新赋值,然后返回新值 */ @Test public void test() { //创建一个 HashMap HashMap<String, Integer> prices = new HashMap<>(); // 往HashMap中添加映射项 prices.put("Shoes", 200); prices.put("Bag", 300); prices.put("Pant", 150); System.out.println("HashMap: " + prices); // 重新计算鞋子打了10%折扣后的值 int newPrice = prices.compute("Shoes", (key, value) -> value - value * 10 / 100); System.out.println("Discounted Price of Shoes: " + newPrice); //如果key不存在,则什么都不做 prices.compute("glass", (key, value) -> null); // 输出更新后的HashMap System.out.println("Updated HashMap: " + prices); } ~~~ 输出 ``` HashMap: {Pant=150, Bag=300, Shoes=200} Discounted Price of Shoes: 180 Updated HashMap: {Pant=150, Bag=300, Shoes=180} ``` 如果key不存在,但是通过函数给key赋值,和computeIfAbsent效果一样,也添加一个计算后的key、value ~~~ @Test public void test1() { //创建一个 HashMap HashMap<String, Integer> prices = new HashMap<>(); // 往HashMap中添加映射项 prices.put("Shoes", 200); prices.put("Bag", 300); prices.put("Pant", 150); System.out.println("HashMap: " + prices); //如果key不存在,但是函数把value赋值了,和computeIfAbsent作用一样 prices.compute("glass", (key, value) -> { int s = 0; if(Objects.isNull(value)) { s = 110; } return s; }); // 输出更新后的HashMap System.out.println("Updated HashMap: " + prices); } ~~~ 增加了一个不存在的glass=110 ``` HashMap: {Pant=150, Bag=300, Shoes=200} Updated HashMap: {glass=110, Pant=150, Bag=300, Shoes=200} ```