Java Map computeIfAbsent()方法示例

x33g5p2x  于2022-09-24 转载在 Java  
字(3.5k)|赞(0)|评价(0)|浏览(196)

computeIfAbsentjava.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方法将把新值放入指定键。

示例-1

指定的键未与值关联
并且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]}

示例-2

指定的键未与值关联
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}

示例-3

指定的键与一个值相关联
并且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}

示例-4

指定的键与空值相关联
并且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}

相关文章

微信公众号

最新文章

更多