computeIfAbsent
是 java.util.Map
的默认方法,已在 Java 8 中引入。当与指定键关联的值不可用或为 null 时,computeIfAbsent
方法起作用,在这种情况下,computeIfAbsent
方法将新的由给定Map函数计算的该键的值。从 Java 文档中找到方法声明。
default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
key 是我们需要关联一个值的键。
mappingFunction 是计算Map值的 java.util.function.Function
类型。computeIfAbsent
返回由给定Map函数计算的现有值或新值。
computeIfAbsent
方法的工作原理如下。
1. 如果指定的键尚未与值关联,并且Map函数计算的新值不为空,则在这种情况下,computeIfAbsent
方法将为指定键放置新值。
2. 如果指定键尚未与值关联,并且Map函数计算的新值为空,在这种情况下,computeIfAbsent
方法将不会为指定键放置新值。
3. 如果指定的键已经关联了一个值,并且Map函数计算的新值不为空,在这种情况下,computeIfAbsent
方法将不会为指定的键放入新值。
4. 如果指定键关联了一个空值,并且Map函数计算的新值不为空,这种情况下computeIfAbsent
方法将把新值放入指定键。
指定的键未与值关联
并且Map函数计算的新值不为空。
在这种情况下,computeIfAbsent
方法将为指定键放置新值。
ComputeIfAbsent1.java
import java.util.HashMap;
import java.util.Map;
public class ComputeIfAbsent1 {
public static void main(String[] args) {
Map<Integer, String> cityMap = new HashMap<>();
cityMap.put(101, "Varanasi");
cityMap.put(102, "Prayag");
String value = cityMap.computeIfAbsent(103, k -> "Noida");
System.out.println(value);
System.out.println(cityMap);
}
}
输出
Noida
{101=Varanasi, 102=Prayag, 103=Noida}
不使用以下 computeIfAbsent
方法也可以实现相同的目的。
ComputeIfAbsent11.java
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
public class ComputeIfAbsent11 {
public static void main(String[] args) {
Map<Integer, String> cityMap = new HashMap<>();
cityMap.put(101, "Varanasi");
cityMap.put(102, "Prayag");
Function<Integer, String> mappingFunction = k -> "Noida";
int key = 103;
String value = mappingFunction.apply(key);
if (cityMap.get(key) == null) {
if (value != null)
cityMap.put(key, value);
}
System.out.println(value);
System.out.println(cityMap);
}
}
输出
Noida
{101=Varanasi, 102=Prayag, 103=Noida}
再找一个 computeIfAbsent
方法的例子。
ComputeIfAbsent12.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ComputeIfAbsent12 {
public static void main(String[] args) {
Map<String, List<String>> map = new HashMap<>();
List<String> countries = new ArrayList<>();
countries.add("Bharat");
map.put("countries", countries);
map.computeIfAbsent("capitals", k -> new ArrayList<>()).add("Delhi");
System.out.println(map);
}
}
输出
{capitals=[Delhi], countries=[Bharat]}
指定的键未与值关联
Map函数计算的新值为空。
在这种情况下,computeIfAbsent
方法不会为指定的键放置新值。
ComputeIfAbsent2.java
import java.util.HashMap;
import java.util.Map;
public class ComputeIfAbsent2 {
public static void main(String[] args) {
Map<Integer, String> cityMap = new HashMap<>();
cityMap.put(101, "Varanasi");
cityMap.put(102, "Prayag");
cityMap.computeIfAbsent(103, k -> null);
System.out.println(cityMap);
}
}
输出
{101=Varanasi, 102=Prayag}
指定的键与一个值相关联
并且Map函数计算的新值不为空。
在这种情况下,computeIfAbsent
方法不会为指定的键放置新值。 Map
不会有任何变化。
ComputeIfAbsent3.java
import java.util.HashMap;
import java.util.Map;
public class ComputeIfAbsent3 {
public static void main(String[] args) {
Map<Integer, String> cityMap = new HashMap<>();
cityMap.put(101, "Varanasi");
cityMap.put(102, "Prayag");
cityMap.computeIfAbsent(102, k -> "Prayagraj");
System.out.println(cityMap);
}
}
输出
{101=Varanasi, 102=Prayag}
指定的键与空值相关联
并且Map函数计算的新值不为空。
在这种情况下,computeIfAbsent
方法将为指定键放置新值。
ComputeIfAbsent4.java
import java.util.HashMap;
import java.util.Map;
public class ComputeIfAbsent4 {
public static void main(String[] args) {
Map<Integer, String> cityMap = new HashMap<>();
cityMap.put(101, "Varanasi");
cityMap.put(102, null);
cityMap.computeIfAbsent(102, k -> "Prayagraj");
System.out.println(cityMap);
}
}
输出
{101=Varanasi, 102=Prayagraj}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.concretepage.com/java/java-8/java-map-computeifabsent
内容来源于网络,如有侵权,请联系作者删除!