Java HashMap computeIfPresent ()

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

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

 hashmap.computeIfPresent(K key, BiFunction remappingFunction)

Тут hashmap є об'єктом HashMapкласу.

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

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

  • ключ - ключ, з яким має бути пов'язане обчислене значення
  • 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: (Штани = 150, Сумка = 300, Взуття = 200) Ціна взуття після ПДВ: 220 Оновлена ​​HashMap: (Pant = 150, Сумка = 300, Взуття = 220))

У наведеному вище прикладі ми створили хеш-карту з цінами. Зверніть увагу на вираз,

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

Ось,

  • (ключ, значення) -> значення + значення * 10/100 - це лямбда-вираз. Він обчислює нове значення Shoes і повертає його. Щоб дізнатись більше про лямбда-вираз, відвідайте Java Lambda Expressions.
  • prices.computeIfPresent () пов'язує нове значення, повернене лямбда-виразом, до відображення для взуття. Це можливо лише тому, що взуття вже зіставлено зі значенням у хеш-карті.

Тут лямбда-вираз діє як функція перепризначення. І для цього потрібні два параметри.

Примітка : Ми не можемо використовувати computeIfPresent()метод, якщо ключа немає в хеш-капі.

Рекомендована література

  • HashMap compute () - обчислює значення для вказаного ключа
  • HashMap computeIfAbsent () - обчислює значення, якщо вказаний ключ не зіставлений з будь-яким значенням
  • Java HashMap merge () - виконує те саме завдання, що і compute()

Цікаві статті...