Когда нужно посчитать частоту значений, часто пишут ручную проверку:
Map<String, Integer> clicks = new HashMap<>();
if (clicks.containsKey("login")) {
clicks.put("login", clicks.get("login") + 1);
} else {
clicks.put("login", 1);
}
Код рабочий, но быстро разрастается: проверка, получение старого значения, обновление.
В Java для таких случаев есть merge():
clicks.merge("login", 1, Integer::sum);Логика такая: если ключа ещё нет, Java положит значение 1.
Если ключ уже есть, Java возьмёт старое значение и объединит его с новым через Integer::sum:
clicks.merge("login", 1, Integer::sum);
clicks.merge("login", 1, Integer::sum);
// login -> 2Это удобно для счётчиков, статистики, лайков, просмотров, ошибок по типам и любых группировок:
for (String event : events) {
counters.merge(event, 1, Integer::sum);
}Можно использовать не только сумму:
prices.merge(productId, newPrice, Math::max);
Здесь в мапе останется максимальная цена для каждого товара.
👉 Java Ready | #совет
