Map中的computeIfAbsent 方法

说明

computeIfAbsent 方法是 Map 接口中的一个方法,它可以用于在执行某个键的映射值不存在时,通过提供的函数计算并将其放入到 Map 中。相比于传统的 if-else 语句,使用 computeIfAbsent 可以提供更简洁和优雅的代码。

使用 computeIfAbsent 可以避免显式的 if-else 逻辑,通过传递一个 lambda 函数来自动处理键不存在的情况。这种方式允许我们将逻辑集中在一个地方,提高代码的可读性和可维护性。

以下是一个使用 computeIfAbsent 替代 if-else 的示例,演示了在 Map 中根据键获取或计算映射值的情况:

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

public class ComputeIfAbsentExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        
        // 传统的 if-else 方式
        String key = "foo";
        if (map.containsKey(key)) {
            int value = map.get(key);
            // 处理映射值存在的逻辑
            System.out.println("Value exists: " + value);
        } else {
            // 处理映射值不存在的逻辑
            int newValue = computeValue(key);
            map.put(key, newValue);
            System.out.println("New value computed and added to map: " + newValue);
        }
        
        // 使用 computeIfAbsent 方式
        map.computeIfAbsent(key, k -> computeValue(k));
        int value = map.get(key);
        System.out.println("Final value: " + value);
    }
    
    private static int computeValue(String key) {
        // 模拟计算映射值的过程
        System.out.println("Computing value for key: " + key);
        return key.length();
    }
}

在这个示例中,我们使用了一个 Map 对象存储键值对。首先,我们展示了传统的 if-else 方式来检查键是否存在,然后根据情况执行相应的逻辑。接下来,我们使用 computeIfAbsent 方法来简化该逻辑,只需提供计算映射值的函数即可。如果键不存在,该函数将被调用,并将计算得到的映射值放入到 Map 中。

通过使用 computeIfAbsent,我们可以减少代码量并提高代码清晰度。这个方法更适合在我们需要根据键的存在与否执行不同的逻辑时使用。

请注意,这只是一个示例,实际使用时,你需要根据具体的需求和数据结构适当应用 computeIfAbsent 方法。

Simply put

The computeIfAbsent method in Java’s Map interface allows you to compute a value for a given key if it is not already associated with a value in the map. Here’s how it works:

  1. The method takes two parameters: the key for which you want to compute a value, and a Function that specifies how to compute the value.
  2. It checks if the key is present in the map. If it is, the method returns the associated value.
  3. If the key is not present, the Function is invoked with the key as the input. The Function calculates and returns the value based on the key.
  4. The returned value is then associated with the key in the map.
  5. Finally, the method returns the computed value.

Here’s an example to illustrate the usage of computeIfAbsent :

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

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        
        // Compute and associate a value for the key "key" if it is absent
        Integer value = map.computeIfAbsent("key", k -> k.length());
        
        System.out.println("Value: " + value); // Output: Value: 3
        System.out.println("Map: " + map); // Output: Map: {key=3}
    }
}

In the above example, we create an empty HashMap and use the computeIfAbsent method to compute and associate a value for the key “key”. Since the key is not present in the map, the Function calculates the length of the key and returns it. The computed value (3) is associated with the key “key” in the map. Finally, we print the computed value and the updated map.

你可能感兴趣的:(JavaBasic,knowledge,&,ME,&,GPT,java)