Sobes.tech
Назад к вопросам
Junior — Middle
60

Какие аргументы и параметры ожидает метод groupingBy из класса Collectors в Java?

Ответ от нейросети

sobes.tech AI

Метод groupingBy из класса Collectors в Java используется для группировки элементов стрима по ключу, который определяется функцией классификации.

Основные варианты аргументов:

  1. groupingBy(Function<? super T, ? extends K> classifier)

    • Принимает функцию, которая для каждого элемента возвращает ключ группировки.
    • Возвращает Collector<T, ?, Map<K, List<T>>>, где значения — списки элементов, сгруппированных по ключу.
  2. groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream)

    • Помимо функции классификации, принимает другой коллектор, который применяется к элементам каждой группы.
    • Позволяет, например, сразу подсчитать количество элементов в группе, собрать их в множество и т.п.
  3. 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()));

// подсчитывает количество имен на каждую букву