Java HashMap: метод computeIfAbsent()
Метод computeIfAbsent() пересчитывает значение для указанного ключа в hashMap; если ключ не существует, он добавляется в hashMap.
Синтаксис computeIfAbsent():
hashmap.computeIfAbsent(K key, Function remappingFunction)
Примечание:hashmap — это объект класса HashMap.
Детали параметров:
- key - ключ
- remappingFunction - функция ремаппинга, используемая для пересчёта значения
Возвращаемое значение
Если значение, соответствующее ключу, не существует, получается значение, пересчитанное remappingFunction, и сохраняется как значение для этого ключа; в противном случае возвращается значение.
Пример
В следующем примере демонстрируется использование метода computeIfAbsent():
Пример
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);
// Вычислить значение для Shirt
int shirtPrice = prices.computeIfAbsent("Shirt", key -> 280);
System.out.println("Price of Shirt: " + shirtPrice);
// Вывести обновлённый HashMap
System.out.println("Обновлённый HashMap: " + prices);
}
}
Вывод вышеприведённой программы:
HashMap: {Pant=150, Bag=300, Shoes=200}
Price of Shirt: 280
Updated HashMap: {Pant=150, Shirt=280, Bag=300, Shoes=200}
В приведённом выше примере мы создали HashMap с именем prices.
Обратите внимание на выражение:
prices.computeIfAbsent("Shirt", key -> 280)
В коде мы использовали анонимную функцию, лямбда-выражение.key-> 280В качестве remapping-функции prices.computeIfAbsent() связывает новое значение, возвращаемое лямбда-выражением, с Shirt.
Поскольку Shirt не существует в HashMap, добавляется новая пара ключ/значение.
Чтобы узнать больше о лямбда-выражениях, посетитеЛямбда-выражения Java。
Случай, когда ключ уже существует:
Пример
class Main {
public static void main(String[] args) {
// Создать HashMap
HashMap<String, Integer> prices = new HashMap<>();
// Добавить сопоставления в HashMap
prices.put("Shoes", 180);
prices.put("Bag", 300);
prices.put("Pant", 150);
System.out.println("HashMap: " + prices);
// Сопоставление для Shoes уже существует
// Новое значение для Shoes не вычисляется
int shoePrice = prices.computeIfAbsent("Shoes", (key) -> 280);
System.out.println("Price of Shoes: " + shoePrice);
// Вывести обновлённый HashMap
System.out.println("Обновлённый HashMap: " + prices);
}
}
Вывод вышеприведённой программы:
HashMap: {Pant=150, Bag=300, Shoes=180}
Price of Shoes: 180
Updated HashMap: {Pant=150, Bag=300, Shoes=180}В приведённом выше примере сопоставление для Shoes уже существует в HashMap, поэтому новое значение для Shoes не вычисляется.
Другие расширения
Java HashMap