Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от 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()));

// брои броя на имената за всяка буква