English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Если в хэш-ключе уже существует соответствующий ключ, то метод computeIfPresent() класса Java HashMap будет вычислять новый значений и ассоциировать его с указанным ключом.
Грамматика метода computeIfPresent():
computeIfPresent(K key, BiFunction remappingFunction) hashmap.computeIfPresent()
Метод computeIfPresent() имеет два параметра:
key - Ключ, связанный с вычисляемым значением
remappingFunction - Для указанногоКлючФункция вычисления нового значения
Внимание: remappingFunction может принимать два параметра.
Возвращается новое значение, связанное с указанным ключом
Если нет значения, связанного с ключом, то возвращается null
Внимание: Если результат remappingFunction равен null, то удаляется указанныйКлючассоциативной карты.
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); // Перерасчет стоимости обуви с НДС 10% int shoesPrice = prices.computeIfPresent("Shoes", (key, value) -> value + value * 10/100); System.out.println("Цена обуви с НДС: " + shoesPrice); // Вывод обновленного HashMap System.out.println("Обновленный HashMap: " + prices); } }
Результат вывода
HashMap: {Pant=150, Bag=300, Shoes=200} Цена обуви с НДС: 220 Обновленный HashMap: {Pant=150, Bag=300, Shoes=220}
В примере выше мы создали хеш-маппинг под названием prices. Обратите внимание на выражение
prices.computeIfPresent("Shoes", (key, value) -> value + value * 10/100)
Здесь,}}
(key, value) -> value + value*10/100 - Это lambda-выражение. Оно вычисляет новое значение Shoes и возвращает. Для получения дополнительной информации о lambda-выражениях посетитеJava Lambda выражения.
prices.computeIfPresent() - Связывает новый возвращаемый значением lambda-выражения с mappings Shoes. Это возможно только потому, что Shoes уже связан с значением в хэш-мапе.
Невозможно использовать метод computeIfPresent(), если ключ не существует в хэш-таблице.
Рекомендуется к прочтению
HashMap compute() - Вычисляет значение для указанного ключа
HashMap computeIfAbsent() - Вычисляет значение, если указанный ключ не связан с любым значением
Java HashMap merge() - Выполняет ту же задачу, что и compute()