Sobes.tech
Назад к вопросам
Junior — Middle
70

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

Компании, где спрашивали
ИннотехИннотех

Ответ от нейросети

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 — по последним доступным значениям.