Какие знаешь операторы RxJava, которые выполняют два запроса одновременно

«Какие знаешь операторы RxJava, которые выполняют два запроса одновременно» — вопрос из категории Реактивное программирование, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

zip и combineLatest - основные операторы для параллельного выполнения запросов.

zip - объединяет результаты строго попарно, дожидается завершения всех источников:

Observable.zip(
    api.getUser(),
    api.getProfile(),
    BiFunction { user, profile -> Pair(user, profile) }
).subscribe { (user, profile) -> ... }

combineLatest - испускает значение при каждом изменении любого из источников:

Observable.combineLatest(
    db.getCachedData(),
    api.getFreshData(),
    BiFunction { cached, fresh -> mergeData(cached, fresh) }
)```  

Для отмены при ошибке используй `amb`, для фонового выполнения - `subscribeOn`.