Иногда нужно понять, сколько раз каждое значение встречается в списке: слова в тексте, статусы заказов, ошибки в логах или действия пользователей.
Допустим, есть список слов:
List<String> words = List.of(
"java", "spring", "java", "api", "spring", "java"
);
Можно вручную создать Map и увеличивать счётчик:
Map<String, Long> result = new HashMap<>();
for (String word : words) {
result.put(word, result.getOrDefault(word, 0L) + 1);
}
Но через Stream API это можно записать короче:
Map<String, Long> result = words.stream()
.collect(Collectors.groupingBy(
Function.identity(),
Collectors.counting()
));
Function.identity() означает: группируем элементы по самому значению.
А Collectors.counting() считает, сколько элементов попало в каждую группу.
Результат будет таким:
{spring=2, java=3, api=1}
Такой подход удобно использовать для аналитики, логов, статистики, тегов, категорий и любых повторяющихся значений.
👉 Java Ready | #практика