map.computeifabsent
时间: 2023-06-05 07:47:53 浏览: 103
computeIfAbsent 方法是 Java 8 中 Map 接口的一种新方法,它在 map 中查找与指定键关联的值。如果该键不存在,则将指定的值与该键关联,并返回该值。如果该键存在,则返回其关联值。
语法:
V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
参数:
- key - 要在此映射中查找的键。
- mappingFunction - 如果需要,将调用其来计算值的函数。
返回值:
- 如果存在该键的关联值,则返回该值。
- 如果不存在该键的关联值,则使用指定的函数计算值并将其与该键关联,然后返回该值。
示例:
```
Map<String, Integer> map = new HashMap<>();
map.computeIfAbsent("a", key -> key.length());
```
上面这段代码中,如果map中不存在键"a",则使用给定的函数计算值,计算出来的值为1,并将键"a"和值1加入map。
相关问题
Map.computeIfAbsent
`Map.computeIfAbsent` 是 Java 中 `Map` 接口提供的一个方法,用于在执行某个键的映射值不存在时,通过提供的函数计算并将其放入到 `Map` 中。这个方法可以提供更简洁和优雅的代码,相比于传统的 if-else 语句。下面是一个示例:
```java
Map<String, Integer> map = new HashMap<>();
// 如果 key 不存在,则计算并关联一个值
Integer value = map.computeIfAbsent("key", k -> k.length());
System.out.println("Value: " + value); // 输出:Value: 3
System.out.println("Map: " + map); // 输出:Map: {key=3}
```
上面的代码中,如果 `map` 中不存在键为 `"key"` 的映射,则会计算出 `"key".length()` 的值 `3` 并将其与 `"key"` 关联起来。如果已经存在,则不会进行任何操作。
areaMap.computeIfAbsent
根据提供的引用内容,`areaMap.computeIfAbsent`是`ConcurrentHashMap`类中的一个方法。它的作用是如果指定的键不存在于映射中,则使用给定的函数计算一个值并将其插入到映射中。该方法的签名如下:
```java
default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
```
其中,`key`是要检查的键,`mappingFunction`是一个函数,用于根据给定的键计算一个值。如果键已经存在于映射中,则不会调用函数,而是直接返回与键关联的值。
以下是一个示例演示如何使用`computeIfAbsent`方法:
```java
ConcurrentHashMap<String, Integer> areaMap = new ConcurrentHashMap<>();
areaMap.put("A", 1);
areaMap.put("B", 2);
int value = areaMap.computeIfAbsent("C", key -> key.length());
System.out.println(value); // 输出:1
value = areaMap.computeIfAbsent("B", key -> key.length());
System.out.println(value); // 输出:2
```
在上面的示例中,我们首先将键值对"A"和"1","B"和"2"放入`areaMap`中。然后,我们使用`computeIfAbsent`方法来获取键"C"对应的值。由于键"C"不存在于映射中,所以我们使用键的长度作为值进行计算,并将其插入到映射中。最后,我们再次使用`computeIfAbsent`方法来获取键"B"对应的值。由于键"B"已经存在于映射中,所以不会调用函数,而是直接返回与键"B"关联的值。