Метод 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()