Java Map compute()、computeIfAbsent()、computeIfPresent()方法区别

Java Map中的compute()、computeIfAbsent()和computeIfPresent()方法都用于根据给定的键和计算函数计算新值,并将其存储在Map中。它们之间的区别在于它们在不同的情况下执行计算函数。

  • compute()方法:如果Map中存在给定的键,则使用计算函数计算新值,并将其存储在Map中。如果计算函数返回null,则compute()方法将从Map中删除给定的键。如果计算函数引发异常,则compute()方法将将异常传播给调用方。
  • computeIfAbsent()方法:如果Map中不存在给定的键,则使用计算函数计算新值,并将其存储在Map中。如果计算函数返回null,则computeIfAbsent()方法将不执行任何操作。如果计算函数引发异常,则computeIfAbsent()方法将将异常传播给调用方。
  • computeIfPresent()方法:如果Map中存在给定的键,则使用计算函数计算新值,并将其存储在Map中。如果计算函数返回null,则computeIfPresent()方法将从Map中删除给定的键。如果计算函数引发异常,则computeIfPresent()方法将将异常传播给调用方。

以下是每个方法的使用示例:

Map<String, Integer> myMap = new HashMap<>();
myMap.put("apple", 1);
myMap.put("banana", 2);

// 使用compute()方法将键"apple"的值增加1
myMap.compute("apple", (key, value) -> value + 1);
// 现在,myMap中的"apple"键的值为2

// 使用computeIfAbsent()方法将键"orange"的值设置为3
myMap.computeIfAbsent("orange", key -> 3);
// 现在,myMap中包含三个键值对

// 使用computeIfPresent()方法将键"apple"的值增加1
myMap.computeIfPresent("apple", (key, value) -> value + 1);
// 现在,myMap中的"apple"键的值为3