Ответ
Комбайн (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 ждет пары.