📜  Java HashMap computeIfPresent()

📅  最后修改于: 2020-09-27 00:38:13             🧑  作者: Mango

如果哈希键中已经存在该键,则Java HashMap的computeIfPresent()方法将计算一个新值并将其与指定的键相关联。

computeIfPresent()方法的语法为:

hashmap.computeIfPresent(K key, BiFunction remappingFunction)

在这里, hashmapHashMap类的对象。


computeIfPresent()参数

computeIfPresent()方法采用2个参数:

  • key-与计算值关联的键
  • remappingFunction-为指定计算新值的函数

注意remappingFunction可以接受两个参数。因此,被视为BiFunction。


computeIfPresent()返回值
  • 返回与指定关联的新值
  • 如果没有与关联的null则返回null

注意 :如果remappingFunction结果为null ,则将删除指定的映射。


示例1:Java HashMap的computeIfPresent()
import java.util.HashMap;

class Main {
  public static void main(String[] args) {
    // create an HashMap
    HashMap 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}}

在上面的示例中,我们创建了一个名为price的哈希表。注意表达式

prices.computeIfPresent("Shoes", (key, value) -> value + value * 10/100)

这里,

  • (键,值)->值+值* 10/100是lambda表达式。它计算Shoes的新值并返回。要了解有关lambda表达式的更多信息,请访问Java Lambda Expressions。
  • prices.computeIfPresent()将lambda表达式返回的新值与Shoes的映射相关联。唯一可能的原因是, Shoes已经映射到哈希图中的值。

在此,lambda表达式用作重新映射函数。并且,它需要两个参数。

注意 :如果哈希图中不存在键,则不能使用computeIfPresent()方法。


推荐读物

  • HashMap compute()-计算指定键的值
  • HashMap computeIfAbsent()-如果指定键未映射到任何值,则计算该值
  • Java HashMap merge()-执行与compute()相同的任务