Junior — Middle
Какви аргументи и параметри очаква методът groupingBy от класа Collectors в Java?
sobes.tech AI
Отговор от 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()));
// брои броя на имената за всяка буква