开发手册 欢迎您!
软件开发者资料库

Java putIfAbsent和computeIfAbsent使用说明及示例代码

本文主要介绍Java中Map的putIfAbsent和computeIfAbsent使用的方法和示例代码。

1、putIfAbsent使用

之前的put方法,只要key存在,value值就会被覆盖,注意put方法返回的是put之前的值,如果无put之前的值,则返回null。putIfAbsent方法,只有在key不存在或者key对应value为null的时候,value值才会被覆盖。

putIfAbsent源代码如下

    default V putIfAbsent(K key, V value) {
V v = get(key);
if (v == null) {
v = put(key, value);
}
return v;
}

使用put()方法实现相同效果,如下代码

if(map.containsKey("kk")&&map.get("kk")!=null) {
map.put("kk", "vv");
}

使用场景:如果我们要变更某个key的值,我们又不知道key是否存在的情况下,而又不需要新增key的情况使用。

2、computeIfAbsent的使用

简单来说,如果map里没有这个key,那么就按照后面的这个function添加对应的key和value

如果要是有这个key,那么就不添加。

源代码如下

 //1. defaultdefault V computeIfAbsent(K key,            Function mappingFunction) {//第一个参数为Map的key,第二个参数是一个函数接口        //2. requireNonNull        Objects.requireNonNull(mappingFunction);        V v;        // 将第一个参数作为key,获取value,并将其赋给v ,判断是否为null        if ((v = get(key)) == null) {               //若v 为null,则创建一个新的值newValue            V newValue;            // 3. mappingFunction.apply            if ((newValue = mappingFunction.apply(key)) != null) {                put(key, newValue);                return newValue;            }        }        return v;    }

使用示例代码

import java.util.*;   public class GFG {       // Main method     public static void main(String[] args)     {           Map map = new Hashtable<>();         map.put("Pen", 10);         map.put("Book", 500);         map.put("Clothes", 400);         map.put("Mobile", 5000);           System.out.println("hashTable: "                           + map.toString());           // 为缺少的新key提供值        // 使用computeIfAbsent方法        map.computeIfAbsent("newPen", k -> 600);         map.computeIfAbsent("newBook", k -> 800);                  System.out.println("new hashTable: "                           + map);     } } 

输出结果:

hashTable:{Book = 500,Mobile = 5000,Pen = 10,Clothes = 400}
new hashTable:{newPen = 600,Book = 500,newBook = 800,Mobile = 5000,Pen = 10,Clothes = 400}

使用场景:我们不知道key是否存在,只是新增key及对应的值,不对之前的key和值做修改。