Для работы с потоками в Kotlin для интерфейса Flow определено ряд функций. В зависимости от того, возвращают они конкретное значение или обработанный поток эти функции делятся на два вида: терминальные функции и промежуточные функции. Рассмотрим основные из них.
Терминальные функции потоков (terminal operators) представляют suspend-функции, которые позволяют непосредственно получать объекты из потока или возвращают какое-то конечное значение:
collect(): получает из потока переданные значения
toList(): преобразует поток значений в коллекцию List
toSet(): преобразует поток значений в коллекцию Set
first() / firstOrNull(): получает первый объект из потока
last() / lastOrNull(): получает последний объект из потока
single() / singleOrNull(): ожидает получение одного объекта из потока
count(): получает количество элементов в потоке
reduce(): получает результат определенной операции над элементами потока
fold(): получает результат определенной операции над элементами потока, в отличие от функции reduce()
принимает начальное значение
Промежуточные функции (Intermediate operator) принимают поток и возвращают обработанный поток.
combine(): объединяет два потока в один, после применения к их элементам функции преобразования
drop(): исключает из начала потока определенное количество значений и возвращает полученный поток
filter(): фильтрует поток, оставляя те элементы, которые соответствуют условию
filterNot(): фильтрует поток, оставляя те элементы, которые НЕ соответствуют условию
filterNotNull(): фильтрует поток, удаляя все элементы, которые равны null
map(): применяет к элементам потока фукцию преобразования
onEach(): применяет к элементам потока определенную функцию перед тем, как они будут переданы в возвращаемый поток
take(): выбирает из потока определенное количество элементов
transform(): применяет к элементам потока функцию преобразования
zip(): из двух потоков создает один, применяя к их элементам функцию преобразования