tgoop.com/java_fillthegaps/198
Last Update:
Коллекторы Stream API, часть 1: простые методы
В первой части повторим основы - из чего состоит стрим и что такое коллектор. Каждый код со Stream API состоит из 3х частей:
1️⃣ Получение стрима
2️⃣ Преобразования
3️⃣ Терминальная операция
1️⃣ list.stream()
Терминальная операция collect собирает элементы стрима в другую структуру данных. Все подробности передаются через аргумент:
2️⃣ .filter(e -> e != 3)
3️⃣ .count(); collect(Collector collector)
Коллекторы - статические методы класса Collectors, которые возвращают аргумент для метода collect. Я буду опускать основной класс и вместо Collectors.counting() будут писать counting(). Чтобы было короче.
Чаще всего элементы стрима собирают в обычную коллекцию:
▪️toCollection, toList, toSet
▪️toUnmodifiableSet, toUnmodifiableList
Set res=students.stream()Ещё одна группа - коллекторы, которые возвращают одно значение:
.filter(…).collect(toSet())
▫️counting
▫️averagingToInt / Long / Double
▫️joining
▫️maxBy, minBy
▫️reducing
▫️summingInt / Long / Double
▫️summarizingInt / Long / Double
Интересны здесь только два метода:
🔸 joining
Соединяет элементы в одну строку:
chars.stream().collect(joining("-"));🔸summarizingInt
// ['a','b','c'] → a-b-c
Возвращает объект IntSummaryStatistics, который содержит минимум, максимум, среднее, количество элементов и их сумму.
Остальные методы сами по себе бесполезны, так как есть простые аналоги:
list.stream().collect(counting())Коллекторы mapping, flatMapping и filtering применяют функцию к элементам перед отправкой в другой коллектор.
// аналог
list.stream().count()
Set<Long> ids = …Использовать их напрямую тоже смысла нет. Проще применить к элементам map, flatmap или filter, а потом собрать результаты:
collect(mapping(Student::id, toSet())
map(Student::id).collect(toSet())❓Зачем нужны эти методы?
Они нужны в коллекторах groupingBy и partitioningBy, про них подробно поговорим завтра.
#core
BY Java: fill the gaps
Share with your friend now:
tgoop.com/java_fillthegaps/198