當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。