当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java HashMap merge()用法及代码示例


如果指定的键已经不存在,Java HashMap merge() 方法将指定的键/值映射插入到哈希图中。

如果指定的键已经与一个值相关联,则该方法将旧值替换为指定函数的结果。

用法:

hashmap.merge(key, value, remappingFunction)

这里,hashmapHashMap 类的对象。

参数:

merge() 方法采用 3 个参数:

  • key- 指定的键value是要关联的
  • value- 关联的值key, 如果key已经与任何值相关联
  • remappingFunction- 关联的结果key如果key已经与一个值相关联

返回:

  • 返回新价值key
  • 如果没有与 key 关联的值,则返回 null

注意: 如果remappingFunction结果null,然后是指定的映射钥匙已移除。

示例 1:HashMap merge() 插入新条目

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);

    int returnedValue = prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue);
    System.out.println("Price of Shirt: " + returnedValue);

    // print updated HashMap
    System.out.println("Updated HashMap: " + prices);
  }
}

输出

HashMap: {Pant=150, Bag=300, Shoes=200}
Price of Shirt: 100
Updated HashMap: {Pant=150, Shirt=100, Bag=300, Shoes=200}

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

prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue)

在这里,我们使用了 lambda 表达式 (oldValue, newValue) -> oldValue + newValue) 作为重映射函数。要了解有关 lambda 表达式的更多信息,请访问 Java Lambda Expressions

由于 Shirt 中不存在键 prices ,因此 merge() 方法插入映射 Shirt=100 。并且,重新映射函数的结果被忽略。

示例 2:HashMap merge() 插入具有重复键的条目

import java.util.HashMap;

class Main {
  public static void main(String[] args) {
    // create an HashMap
    HashMap<String, String> countries = new HashMap<>();

    // insert entries to the HashMap
    countries.put("Washington", "America");
    countries.put("Canberra", "Australia");
    countries.put("Madrid", "Spain");
    System.out.println("HashMap: " + countries);

    // merge mapping for key Washington
    String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue);
    System.out.println("Washington: " + returnedValue);

    // print updated HashMap
    System.out.println("Updated HashMap: " + countries);
  }
}

输出

HashMap: {Madrid=Spain, Canberra=Australia, Washington=America}
Washington: America/USA
Updated HashMap: {Madrid=Spain, Canberra=Australia, Washington=America/USA}, 

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

countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue)

在这里,我们使用了 lambda 表达式 (oldValue, newValue) -> oldValue + "/" + newValue) 作为重映射函数。

由于 Washington 键已存在于 countries 中,因此旧值将替换为重新映射函数返回的值。因此,Washington 的映射包括值 America/USA

示例 3:HashMap merge() 合并两个 HashMap

import java.util.HashMap;

class Main {
  public static void main(String[] args) {
    // create an HashMap
    HashMap<String, Integer> prices1 = new HashMap<>();

    // insert entries to the HashMap
    prices1.put("Pant", 230);
    prices1.put("Shoes", 350);
    System.out.println("HashMap 1: " + prices1);

    // create another hashmap
    HashMap<String, Integer> prices2 = new HashMap<>();

    //insert entries to the HashMap
    prices2.put("Shirt", 150);
    prices2.put("Shoes", 320);
    System.out.println("HashMap 2: " + prices2);

    // forEach() access each entries of prices2
    // merge() inserts each entry from prices2 to prices1
    prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
      
      // return the smaller value
      if (oldValue < newValue) {
        return oldValue;
      }
      else {
        return newValue;
      }
    }));

    System.out.println("Merged HashMap: " + prices1);
  }
}

输出

HashMap 1: {Pant=230, Shoes=350}
HashMap 2: {Shirt=150, Shoes=320}
Merged HashMap: {Pant=230, Shirt=150, Shoes=320}

在上面的示例中,我们创建了两个名为 prices1prices2 的哈希图。注意代码,

prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
      if (oldValue < newValue) {
        return oldValue;
      }
      else {
        return newValue;
      }
    }));

在这里,HashMap forEach() 方法访问 hashmap prices2 的每个条目并将其合并到 hashmap prices1 。我们使用了两个 lambda 表达式:

  • (键,值)-> price.merge(...)- 它访问每个条目prices1并将其传递给merge()方法。
  • (旧值,新值)-> {...}- 这是一个重新映射函数。它比较两个值并返回较小的值。

由于键 Shoes 存在于两个哈希图中,因此 Shoes 的值被重新映射函数的结果替换。

Java HashMap merge() 对比。全部放

我们还可以使用putAll() 方法来合并两个哈希图。但是,如果两个哈希图中都存在一个键,则旧值将被新值替换。

merge() 不同,putAll() 方法不提供重新映射函数。因此,我们无法决定为重复键存储什么值。

要了解有关putAll() 方法的更多信息,请访问Java HashMap putAll()

相关用法


注:本文由纯净天空筛选整理自 Java HashMap merge()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。