Ответ
zip и combine — операторы для объединения нескольких Flow, но работают они по-разному:
- zip — ждет, пока каждый из объединяемых
Flowиспустит новое значение, затем применяет функцию-преобразователь. Если один изFlowиспустил значение, а другой нет — ждет. Порядок важен.
flow1.zip(flow2) { a, b -> "$a and $b" }
- combine — при каждом новом значении любого из
Flowпересчитывает результат, используя последние значения из всехFlow. Не ждет обновлений всех источников.
flow1.combine(flow2) { a, b -> "$a and $b" }
Пример:
Если flow1 испустил 1, а flow2 еще ничего не испустил:
zip— не сработает.combine— сработает, когдаflow1обновится (еслиflow2уже имел значение).
Вывод:
zip — строгий, combine — реактивный.