Что такое оператор switchMap в RxJava

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

Ответ

switchMap — оператор в RxJava, преобразующий элементы потока в новые Observable, но отменяет предыдущие подписки при поступлении новых элементов. Полезен для сценариев, где важна только последняя активность (например, поиск с отменой предыдущих запросов).

Пример:

searchObservable
    .switchMap { query -> 
        api.search(query) // Отменяет предыдущий запрос при новом поиске
    }
    .subscribe { results -> 
        // Обновляет UI только для последнего запроса
    }

Ключевые особенности:

  • Отменяет предыдущие подписки, предотвращая утечки.
  • Гарантирует обработку только последнего значения.
  • Не сохраняет порядок выполнения, если новые элементы приходят быстрее, чем завершаются старые запросы.

Альтернативы: flatMap (параллельные запросы), concatMap (сохраняет порядок).