Если нужно быстро сгруппировать элементы потока по какому-то признаку — используйте Collectors.groupingBy(). Пример: группируем пользователей по возрасту Map<Integer, List<User>> byAge = users.stream() .collect(Collectors.groupingBy(User::getAge)); Что происходит: Stream проходит по списку users groupingBy берёт значение из User::getAge В результате получаем Map<Возраст, List<User>> Когда это полезно: • группировка заказов по статусу • пользователей по ролям • транзакций по дате • логов по уровню (INFO / ERROR) Бонус: можно комбинировать с другими Collectors Map<Integer, Long> countByAge = users.stream() .collect(Collectors.groupingBy( User::getAge, Collectors.counting() )); Минимум кода - максимум читаемости. Подписывайся, больше фишек каждый день!