Назад к вопросам
Junior — Middle
60
Какие аргументы и параметры ожидает метод groupingBy из класса Collectors в Java?
Ответ от нейросети
sobes.tech AI
Метод groupingBy из класса Collectors в Java используется для группировки элементов стрима по ключу, который определяется функцией классификации.
Основные варианты аргументов:
-
groupingBy(Function<? super T, ? extends K> classifier)- Принимает функцию, которая для каждого элемента возвращает ключ группировки.
- Возвращает
Collector<T, ?, Map<K, List<T>>>, где значения — списки элементов, сгруппированных по ключу.
-
groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)- Помимо функции классификации, принимает другой коллектор, который применяется к элементам каждой группы.
- Позволяет, например, сразу подсчитать количество элементов в группе, собрать их в множество и т.п.
-
groupingBy(Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream)- Позволяет указать конкретную реализацию карты (например,
TreeMapвместоHashMap).
- Позволяет указать конкретную реализацию карты (например,
Пример использования:
List<String> names = Arrays.asList("Anna", "Bob", "Alice", "Brian", "Amanda");
Map<Character, List<String>> grouped = names.stream()
.collect(Collectors.groupingBy(name -> name.charAt(0)));
// grouped будет содержать ключи 'A' и 'B' с соответствующими списками имен
И пример с downstream-коллектором:
Map<Character, Long> countByFirstLetter = names.stream()
.collect(Collectors.groupingBy(name -> name.charAt(0), Collectors.counting()));
// подсчитывает количество имен на каждую букву