English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java Grund教程

Java Flusskontrolle

Java Array

Java objektorientiert (I)

Java objektorientiert (II)

Java objektorientiert (III)

Java Ausnahmebehandlung

Java Liste (List)

Java Queue (Warteschlange)

Java Map-Kollektion

Java Set-Kollektion

Java Eingabe/Ausgabe (I/O)

Java Reader/Writer

Andere Themen von Java

Verwendung und Beispiel der Java HashMap merge()

Java HashMap Methoden

Wenn der angegebene Schlüssel nicht existiert, fügt die Java HashMap merge() Methode den angegebenen Schlüssel/Wertzuordnung wird in die Hash-Mapping eingefügt.

Wenn jedoch der angegebene Schlüssel bereits mit einem Wert verbunden ist, ersetzt diese Methode den alten Wert durch das Ergebnis der angegebenen Funktion.

Syntax der merge() Methode:

hashmap.merge(key, value, remappingFunction)

merge() Parameter

merge() Methode verwendet3Parameter:

  • key -  Den Wert angeben, der mit dem Schlüssel verbunden werden soll

  • value - Wenn der key bereits mit jedem Wert verbunden ist, dann der Wert, der mit dem key verbunden ist

  • remappingFunction - Wenn der Schlüssel bereits mit einem Wert verbunden ist, wird das Ergebnis mit dem Schlüssel verbunden.

merge() Rückgabewert

  • Rückgabe des neuen Wertes, der mit dem Schlüssel (key) verbunden ist

  • Wenn kein Wert mit dem Schlüssel (key) verbunden ist, wird null zurückgegeben

Hinweis:Wenn das Ergebnis von remappingFunction null ist, wird die Zuordnung des angegebenen Schlüssels gelöscht.

示例1:HashMap merge() fügt einen neuen Eintrag hinzu

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    //创建 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("Der Preis des Hemdes: ") + returnedValue);
    //Drucken Sie die aktualisierte HashMap aus
    System.out.println("Aktualisierte HashMap: ") + prices);
  }
}

输出结果

HashMap: {Pant=150, Bag=300, Shoes=200}
Der Preis des Hemdes: 100
Aktualisierte HashMap: {Pant=150, Shirt=100, Bag=300, Shoes=200}

Im obigen Beispiel haben wir eine Hash-Mapping namens prices erstellt. Beachten Sie den Ausdruck

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

Hier verwenden wir den Lambda-Ausdruck (oldValue, newValue) -> oldValue + newValue) als remappingFunction-Funktion. Für mehr Informationen zu Lambda-Ausdrücken besuchen SieJava Lambda-Ausdrücke.

Da der Schlüssel Shirt in prices nicht existiert, wird der merge()-Methode Shirt=100 Einträge in die Map eingefügt. Und das Ergebnis von remappingFunction wird ignoriert.

示例2: HashMap merge() insertiert Einträge mit doppelten Schlüsseln

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    // 创建 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);
    // Kombination der Mapping für den Washington-Schlüssel
    String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue);
    System.out.println("Washington: ") + returnedValue);
    // Drucken Sie die aktualisierte HashMap aus
    System.out.println("Aktualisierte HashMap: ") + countries);
  }
}

输出结果

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

In diesem Beispiel haben wir eine als countries bezeichnete Hash-Mapping erstellt. Beachten Sie den Ausdruck

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

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

由于键Washington已经存在countries中,所以旧值将由remappingFunction返回的值替换。因此,Washington 的映射包括值 America/USA。

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

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    //创建 HashMap
    HashMap<String, Integer> prices1 = new HashMap<>();
    //向HashMap插入条目
    prices1.put("Pant", 230);
    prices1.put("Shoes", 350);
    System.out.println("HashMap 1: \ + prices1);
    //创建另一个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);
  }
}

输出结果

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

在上面的示例中,我们创建了两个名为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表达式:

  • (key, value) -> prices.merge(...) - es den Zugriff auf prices1jeder Eintrag und leitet ihn an die merge() -Methode weiter.

  • (oldValue, newValue) -> {...}  - Dies ist eine Remapping-Funktion (remappingFunction). Sie vergleicht zwei Werte und gibt den kleineren zurück.

Da der Schlüssel Shoes in beiden Hash-Mappings existiert, wird der Wert von Shoes durch das Ergebnis der Remapping-Funktion (remappingFunction) ersetzt.

Java HashMap merge() und putAll()

Wir können auch die putAll() -Methode verwenden, um zwei Hash-Mappings zu kombinieren. Wenn jedoch beide Hash-Mappings denselben Schlüssel haben, wird der alte Wert durch den neuen Wert ersetzt.

Im Gegensatz zu merge() bietet die putAll() -Methode keine Remapping-Funktion. Daher können wir den Wert nicht bestimmen, der für wiederholte Schlüssel gespeichert werden soll.

Für mehr Informationen über die putAll() -Methode besuchen Sie bitteJava HashMap putAll().

Java HashMap Methoden