Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpCoCe 217 of 322 menu
◀ ▶

Вычисление значения в карте в Java

Интерфейс Map с Java 8 получил методы, которые сами проверяют наличие ключа и считают новое значение. Так меньше шаблонного кода с containsKey, get и повторным put.

Метод computeIfAbsent добавляет значение только если ключа еще нет. computeIfPresent меняет запись, когда ключ найден. compute вызывает функцию в любом случае и может вернуть null, чтобы удалить пару.

Подсчет частот символов в слове:

import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Character, Integer> freq = new HashMap<>(); for (char ch : "aba".toCharArray()) { freq.compute(ch, (key, old) -> old == null ? 1 : old + 1); } System.out.println(freq); } }

Лямбда получает ключ и старое значение (или null). Для группировки списков по ключу удобен computeIfAbsent с фабрикой пустого списка:

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, List<Integer>> groups = new HashMap<>(); groups.computeIfAbsent("a", k -> new ArrayList<>()).add(1); groups.computeIfAbsent("a", k -> new ArrayList<>()).add(2); System.out.println(groups.get("a")); } }

Второй вызов не создает новый список: ключ уже есть, возвращается существующий объект.

Посчитайте, сколько раз встречается каждая буква в слове "java" или compute, и выведите карту.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить