Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java HashMap merge() 使用方法及示例

Java HashMap 方法

如果指定的鍵不存在,則Java HashMap merge()方法會將指定的鍵/值映射插入到哈希映射中。

但是,如果指定的鍵已經(jīng)與一個值關(guān)聯(lián),則該方法將舊的值替換為指定函數(shù)的結(jié)果。

merge()方法的語法為:

hashmap.merge(key, value, remappingFunction)

merge()參數(shù)

merge()方法采用3個參數(shù):

  • key -  要指定與鍵關(guān)聯(lián)的值

  • value - 如果key已經(jīng)與任何值關(guān)聯(lián),則需要與key關(guān)聯(lián)的值

  • remappingFunction - 如果鍵已經(jīng)與值關(guān)聯(lián),則結(jié)果與鍵關(guān)聯(lián)。

merge()返回值

  • 返回與鍵(key)關(guān)聯(lián)的新值

  • 如果沒有與鍵(key)關(guān)聯(lián)的值,則返回null

注意:如果remappingFunction結(jié)果為null,則將刪除指定鍵的映射。

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

import java.util.HashMap;

class Main {
  public static void main(String[] args) {
    //創(chuàng)建 HashMap
    HashMap<String, Integer> prices = new HashMap<>();

    //向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("襯衫的價格: " + returnedValue);

    //打印更新的HashMap
    System.out.println("更新后的 HashMap: " + prices);
  }
}

輸出結(jié)果

HashMap: {Pant=150, Bag=300, Shoes=200}
襯衫的價格: 100
更新后的 HashMap: {Pant=150, Shirt=100, Bag=300, Shoes=200}

在上面的示例中,我們創(chuàng)建了一個名為prices的哈希映射。注意表達(dá)式

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

在這里,我們使用了lambda表達(dá)式  (oldValue, newValue) -> oldValue + newValue)  作為remappingFunction函數(shù)。要了解有關(guān)lambda表達(dá)式的更多信息,請?jiān)L問Java Lambda 表達(dá)式。

由于鍵Shirt在prices中不存在,因此merge()方法將Shirt=100插入映射。并且,remappingFunction的結(jié)果將被忽略。

示例2:HashMap merge()插入具有重復(fù)鍵的條目

import java.util.HashMap;

class Main {
  public static void main(String[] args) {
    // 創(chuàng)建 HashMap
    HashMap<String, String> countries = new HashMap<>();

    // 向HashMap插入條目
    countries.put("Washington", "America");
    countries.put("Canberra", "Australia");
    countries.put("Madrid", "Spain");
    System.out.println("HashMap: " + countries);

    // Washington 鍵的合并映射
    String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue);
    System.out.println("Washington: " + returnedValue);

    // 打印更新的HashMap
    System.out.println("更新后的 HashMap: " + countries);
  }
}

輸出結(jié)果

HashMap: {Madrid=Spain, Canberra=Australia, Washington=America}
Washington: America/USA
更新后的 HashMap: {Madrid=Spain, Canberra=Australia, Washington=America/USA},

在上面的示例中,我們創(chuàng)建了一個名為countries的哈希映射。注意表達(dá)式

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

在這里,我們使用了lambda表達(dá)式(oldValue, newValue) -> oldValue + "/" + newValue) 作為 remappingFunction。

由于鍵Washington已經(jīng)存在countries中,所以舊值將由remappingFunction返回的值替換。因此,Washington 的映射包括值 America/USA。

示例3:HashMap merge() 合并兩個 HashMap

import java.util.HashMap;

class Main {
  public static void main(String[] args) {
    //創(chuàng)建 HashMap
    HashMap<String, Integer> prices1 = new HashMap<>();

    //向HashMap插入條目
    prices1.put("Pant", 230);
    prices1.put("Shoes", 350);
    System.out.println("HashMap 1: " + prices1);

    //創(chuàng)建另一個hashmap
    HashMap<String, Integer> prices2 = new HashMap<>();

    //向HashMap插入條目
    prices2.put("Shirt", 150);
    prices2.put("Shoes", 320);
    System.out.println("HashMap 2: " + prices2);

    // forEach()訪問prices2的每個條目
    // merge()將每個條目從prices2插入到prices1
    prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
      
      //返回較小的值
      if (oldValue < newValue) {
        return oldValue;
      }
      else {
        return newValue;
      }
    }));

    System.out.println("合并后的 HashMap: " + prices1);
  }
}

輸出結(jié)果

HashMap 1: {Pant=230, Shoes=350}
HashMap 2: {Shirt=150, Shoes=320}
合并后的 HashMap: {Pant=230, Shirt=150, Shoes=320}

在上面的示例中,我們創(chuàng)建了兩個名為prices1和prices2的哈希映射。注意代碼,

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

在這里,HashMap forEach()方法訪問哈希表prices2的每個條目,并將其合并到哈希表prices1中。 我們使用了兩個lambda表達(dá)式:

  • (key, value) -> prices.merge(...) - 它訪問prices1的每個條目,并將其傳遞給merge()方法。

  • (oldValue, newValue) -> {...}  - 這是一個重新映射函數(shù)(remappingFunction)。它比較兩個值并返回較小的值。

由于鍵Shoes在兩個哈希映射中都存在,因此Shoes的值被重新映射函數(shù)(remappingFunction)的結(jié)果替換。

Java HashMap merge()與putAll()

我們還可以使用putAll()方法合并兩個哈希映射。 但是,如果兩個哈希映射中都存在鍵,則舊值將被新值替換

與merge()不同,putAll()方法不提供重新映射功能。 因此,我們無法確定要為重復(fù)鍵存儲的值。

要了解有關(guān)該putAll()方法的更多信息,請?jiān)L問Java HashMap putAll()。

Java HashMap 方法

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清