📜  Java中的属性 computeIfAbsent(Key, 函数 ) 方法及示例(1)

📅  最后修改于: 2023-12-03 15:31:59.802000             🧑  作者: Mango

Java中的属性 computeIfAbsent(Key, 函数) 方法及示例

Java中的computeIfAbsent(Key, 函数)方法是ConcurrentHashMap类中的一个方法,它可以用来在Map中加入一个新的键值对,如果对应键已经存在,则不做任何操作。它的方法签名如下:

default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)

其中:

  • key:要查找或添加的Map的键。
  • mappingFunction:如果该键在Map中不存在,则用该函数生成要添加的值。

这个函数也被称为“惰性初始化”函数,因为它只有在键不存在时才调用。该方法能够很好地实现缓存的功能,允许程序员定义一个生成值的函数,并且只有在需要时才生成值。

下面是一个示例展示了computeIfAbsent方法是如何被使用的:

import java.util.HashMap;
import java.util.Map;

class MyClass {

    private final Map<Integer, String> map;

    public MyClass() {
        map = new HashMap<>();
    }

    public String getValue(int key) {
        return map.computeIfAbsent(key, k -> createNewValue(k));
    }

    private String createNewValue(Integer key) {
        String value = "Value_" + key;
        System.out.println("Created new value: " + value);
        return value;
    }
}

public class Main {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        System.out.println(myClass.getValue(1));
        System.out.println(myClass.getValue(2));
        System.out.println(myClass.getValue(1));
    }
}

在这个例子中,我们创建了一个MyClass类,该类建立了一个Map对象,然后实现了getValue方法。如果该方法的参数key在map中不存在,则调用createNewValue方法以生成一个新的键值对。如果该方法的参数key已经存在于map中,则返回对应的值而不调用createNewValue方法。

下面是程序运行的输出结果:

Created new value: Value_1
Value_1
Created new value: Value_2
Value_2
Value_1

我们可以看到,在第一次请求getValue方法时,createNewValue方法被调用,并且生成了新的键值对。在接下来的两次请求中,getValue方法直接返回了已经添加到Map所对应的值。

总之,computeIfAbsent(Key, 函数)方法使得我们能够方便地向Map对象添加新的键值对,并且不会重复添加已经存在的键。