📅  最后修改于: 2023-12-03 15:01:29.982000             🧑  作者: Mango
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 函数抛出异常,则该异常将被转发给调用方。