Работал ли с zip в Flow

«Работал ли с zip в Flow» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал. В Kotlin Flow можно использовать операторы zip для комбинирования двух потоков. Он ждет элементы из обоих Flow, затем применяет функцию преобразования.

Пример:

val flow1 = flowOf(1, 2, 3)
val flow2 = flowOf("A", "B", "C")

flow1.zip(flow2) { num, char -> "$num$char" }
    .collect { println(it) } // 1A, 2B, 3C

Нюансы:

  • Если один Flow завершится раньше, zip тоже завершится.
  • Элементы комбинируются строго попарно в порядке эмиссии.
  • Работает только с двумя Flow. Для большего числа используйте combine.