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

Основной учебник Java

Java flow control

Java array

Java object-oriented (I)

Java object-oriented (II)

Java object-oriented (III)

Обработка исключений Java

Java List

Java Queue (queue)

Java Map collection

Java Set collection

Java input/output (I/O)

Java Reader/Writer

Java other topics

Java HashMap merge() usage and example

Java методы HashMap

If the specified key does not exist, the Java HashMap merge() method will insert the specified key/value mapping into the hash map.

However, if the specified key is already associated with a value, this method will replace the old value with the result of the specified function.

The syntax of the merge() method is:

hashmap.merge(key, value, remappingFunction)

merge() parameters

The merge() method takes 3 parameters:

  • key - To specify the value associated with the key

  • value - If the key is already associated with any value, then the value associated with the key

  • remappingFunction - If the key is already associated with a value, the result is associated with the key.

Worth returning

  • Возвращает новый значение, связанное с ключом (key)

  • Если нет значения, связанного с ключом (key), то возвращается null

Обратите вниманиеЕсли результат remappingFunction равен null, то удаляется карта с указанным ключом.

Пример 1: вставка новых элементов с помощью метода merge() в HashMap

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("Цена рубашки: " + returnedValue);
    // Вывод обновленного HashMap
    System.out.println("Обновленный HashMap: " + prices);
  }
}

Результат вывода

HashMap: {Pant=150, Bag=300, Shoes=200}
Цена рубашки: 100
Обновленный HashMap: {Pant=150, Shirt=100, Bag=300, Shoes=200}

В предыдущем примере мы создали карту с именем prices. Обратите внимание на выражение

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

Здесь мы используем лямбда-выражение (oldValue, newValue) -> oldValue + newValue) в качестве функции remappingFunction. Для получения дополнительной информации о лямбда-выражениях посетитеJava Lambda выражения.

Поскольку ключ Shirt в prices отсутствует, метод merge() вставит Shirt=100 в карту и результат remappingFunction будет проигнорирован.

Пример 2: вставка элементов с повторяющимися ключами с помощью метода merge() в HashMap

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);
    // Объединение карты ключа Washington
    String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue);
    System.out.println("Washington: " + returnedValue);
    // Печать обновленного HashMap
    System.out.println("Обновленный HashMap: " + countries);
  }
}

Результат вывода

HashMap: {Madrid=Spain, Canberra=Australia, Washington=America}
Washington: America/USA
Обновленный HashMap: {Madrid=Spain, Canberra=Australia, Washington=America/USA},

В上面的 примере мы создали хеш-мапу под названием countries. Обратите внимание на выражение

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

Здесь мы используем лямбда-выражение (oldValue, newValue) -> oldValue + "/" + newValue) в качестве remappingFunction.

Поскольку ключ Washington уже существует в countries, старое значение будет заменено значением, возвращаемым remappingFunction. Таким образом, карта Washington включает значение America/USA.

Пример 3: метод merge() HashMap объединяет два 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. Мы используем два лямбда-выражения:

  • (key, value) -> prices.merge(...) - Она посещает каждый элемент prices1 и передает его методу merge().

  • (oldValue, newValue) -> {...}  - Это функция ремаппинга (remappingFunction). Она сравнивает два значения и возвращает более малое.

Поскольку ключ Shoes существует в обоих хэш-картах, значение Shoes будет заменено результатом функции ремаппинга (remappingFunction).

Java HashMap merge() и putAll()

Мы также можем использовать метод putAll() для объединения двух хэш-карт, но если в обоих хэш-картах есть ключи, старые значения будут заменены новыми

В отличие от merge(), метод putAll() не предоставляет функцию ремаппинга. Таким образом, мы не можем определить значения, которые нужно хранить для повторяющихся ключей.

Чтобы узнать больше о методе putAll(), пожалуйста, посетитеJava HashMap putAll().

Java методы HashMap