Java HashMap computeIfPresent ()

Метод computeIfPresent () Java HashMap вычисляет новое значение и связывает его с указанным ключом, если ключ уже присутствует в хэш-карте.

Синтаксис computeIfPresent()метода:

 hashmap.computeIfPresent(K key, BiFunction remappingFunction)

Здесь hashmap - это объект HashMapкласса.

computeIfPresent () Параметры

computeIfPresent()Метод принимает 2 параметра:

  • key - ключ, с которым должно быть связано вычисленное значение
  • remappingFunction - функция, которая вычисляет новое значение для указанного ключа

Примечание . Функция remappingFunction может принимать два аргумента. Следовательно, считается BiFunction.

computeIfPresent () Возвращаемое значение

  • возвращает новое значение, связанное с указанным ключом
  • возвращается, nullесли с ключом не связано значение

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

Пример 1: Java HashMap computeIfPresent ()

 import java.util.HashMap; class Main ( public static void main(String() args) ( // create an HashMap HashMap 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); // recompute the value of Shoes with 10% VAT int shoesPrice = prices.computeIfPresent("Shoes", (key, value) -> value + value * 10/100); System.out.println("Price of Shoes after VAT: " + shoesPrice); // print updated HashMap System.out.println("Updated HashMap: " + prices); ) )

Вывод

 HashMap: (Pant = 150, Bag = 300, Shoes = 200) Цена обуви без НДС: 220 Обновленная HashMap: (Pant = 150, Bag = 300, Shoes = 220))

В приведенном выше примере мы создали хэш-карту с именем price. Обратите внимание на выражение,

 prices.computeIfPresent("Shoes", (key, value) -> value + value * 10/100)

Вот,

  • (ключ, значение) -> значение + значение * 10/100 - это лямбда-выражение. Он вычисляет новое значение Shoes и возвращает его. Чтобы узнать больше о лямбда-выражении, посетите Java Lambda Expressions.
  • price.computeIfPresent () связывает новое значение, возвращаемое лямбда-выражением, с отображением для Shoes. Это возможно только потому, что Shoes уже сопоставлено со значением в хэш-карте.

Здесь лямбда-выражение действует как функция переназначения. И он принимает два параметра.

Примечание : мы не можем использовать computeIfPresent()метод, если ключ отсутствует в хэш-карте.

Рекомендуемая литература

  • HashMap compute () - вычисляет значение для указанного ключа
  • HashMap computeIfAbsent () - вычисляет значение, если указанный ключ не сопоставлен ни с каким значением
  • Java HashMap merge () - выполняет ту же задачу, что и compute()

Интересные статьи...