В чем разница между комбайн-оператором и zip-оператором

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

Ответ

Комбайн (combine) и zip оба комбинируют несколько потоков, но работают по-разному:

  • Combine – объединяет последние значения из каждого потока при каждом новом значении. Если один поток испускает значения чаще, чем другой, комбайн будет использовать последнее значение из медленного потока.
flow1.combine(flow2) { a, b -> "$a and $b" }
// Если flow1: 1, 2, 3; flow2: "A", "B" → "1 and A", "2 and A", "2 and B", "3 and B"
  • Zip – ждет пару значений из каждого потока и объединяет их строго попарно. Если один поток быстрее, лишние значения игнорируются.
flow1.zip(flow2) { a, b -> "$a and $b" }
// Если flow1: 1, 2, 3; flow2: "A", "B" → "1 and A", "2 and B" (3 отбрасывается)

Итог: combine реагирует на каждое обновление, zip ждет пары.