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