computeIfPresent()
方法的语法是:
hashmap.computeIfPresent(K key, BiFunction remappingFunction)
这里,
hashmap 是
HashMap
类的对象。
computeIfPresent() 参数
computeIfPresent()
方法有两个参数:
注意: remappingFunction 可以接受两个参数。因此,被视为 BiFunction。
computeIfPresent() 返回值
返回与指定key相关联的新值 如果没有与 key 关联的值,则返回null
注意: 如果 remappingFunction 结果为 null,则删除指定键的映射。
示例 1: Java HashMap computeIfPresent()
import java.util.HashMap; class Main { public static void main(String[] args) { // create an HashMap HashMap<String, Integer> prices = new HashMap<>(); // insert entries to the HashMap prices.put("Shoes", 200); prices.put("Bag", 300); prices.put("Pant", 150); System.out.println("HashMap: " + prices); // recompute the value of Shoes with 10% VAT int shoesPrice = prices.computeIfPresent("Shoes", (key, value)-> value + value * 10/100); System.out.println("Price of Shoes after VAT: " + shoesPrice); // print updated HashMap System.out.println("Updated HashMap: " + prices); } }
输出
HashMap: {Pant=150, Bag=300, Shoes=200} Price of Shoes after VAT: 220 Updated HashMap: {Pant=150, Bag=300, Shoes=220}}
在上面的例子中,我们创建了一个名为
prices 的哈希图。注意表达式,
prices.computeIfPresent("Shoes", (key, value)-> value + value * 10/100)
这里,
(key, value)-> value + value*10/100 是一个 lambda 表达式。它计算 Shoes 的新值并返回它。要了解有关 lambda 表达式的更多信息,请访问 Java Lambda 表达式。
prices.computeIfPresent() 将 lambda 表达式返回的新值与 Shoes 的映射相关联。这是唯一可能的,因为 Shoes 已经映射到 hashmap 中的一个值。
这里,lambda 表达式充当重映射函数。而且,它需要两个参数。
注意: 如果键不存在于哈希图中,我们不能使用 computeIfPresent() 方法。
推荐阅读
HashMap compute()-计算指定键的值
HashMap computeIfAbsent()-如果指定的键未映射到任何键,则计算该值价值
Java HashMap merge()-执行与 compute() 相同的任务