Sobes.tech
Back to questions
Junior — Middle
71

Объясните различия между операциями zip и combine в Flow Kotlin.

Companies where asked
ИннотехИннотех

Answer from AI

sobes.tech AI

В Kotlin Flow операции zip и combine используются для объединения нескольких потоков, но работают по-разному:

  • zip объединяет элементы из двух (или более) потоков попарно, ожидая, пока каждый поток выдаст следующий элемент. Результат формируется из пар элементов с одинаковым индексом. Если один поток завершится, то и объединённый поток завершится.

  • combine реагирует на любое новое значение из любого из потоков и объединяет последнее значение каждого из них. То есть, когда в одном из потоков появляется новое значение, combine сразу эмитит результат с последними значениями всех потоков.

Пример:

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

flow1.zip(flow2) { a, b -> "$a$b" } // выдаст: "1A", "2B", "3C"

flow1.combine(flow2) { a, b -> "$a$b" } // выдаст: "1A", "2A", "2B", "3B", "3C", "3D"

Таким образом, zip синхронизирует элементы по порядку, а combine — по последним доступным значениям.