📜  Java HashMap computeIfPresent()(1)

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

Java HashMap computeIfPresent()

Java HashMap computeIfPresent() 方法用于基于给定键和对应的值计算新值,如果给定的键在 HashMap 中存在且对应的值不为 null,则使用计算出的新值替换旧值,如果计算后的新值为 null,则删除该键值对。

computeIfPresent() 方法的签名如下:

default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)```

参数:

- key:需要计算的键。
- remappingFunction:用于计算新值的函数。

返回值:计算后的新值,如果键值对不存在或计算后的新值为 null,则返回 null。

调用示例代码如下:

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

public class Example {
    public static void main(String[] args) {

        Map<String, Integer> map = new HashMap<>();
        map.put("key", 10);

        // 使用 computeIfPresent() 方法计算新值
        map.computeIfPresent("key", (k, v) -> v + 1); 

        System.out.println(map); // 输出:{key=11}
    }
}

上述示例中,我们使用 HashMap 的 computeIfPresent() 方法,对键 "key" 所对应的值进行计算,并将计算后的新值替换旧值。在本例中,我们对键 "key" 所对应的值进行加 1 计算,并将计算后的新值 11 存储在 HashMap 中。

我们也可以使用 computeIfPresent() 方法来删除键值对,如下所示:

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

public class Example {
    public static void main(String[] args) {

        Map<String, Integer> map = new HashMap<>();
        map.put("key", 10);

        // 使用 computeIfPresent() 方法删除键值对
        map.computeIfPresent("key", (k, v) -> null); 

        System.out.println(map); // 输出:{}
    }
}

在本例中,我们使用 HashMap 的 computeIfPresent() 方法和一个返回 null 的函数来删除键值对。在计算后,由于返回值为 null,所以键值对被删除。

需要注意的是,在使用 computeIfPresent() 方法时,如果 remappingFunction 函数抛出异常,则该异常将被转发给调用方。