В чем разница между flatMap и switchMap

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

Ответ

flatMap и switchMap — операторы из RxJava, преобразующие элементы потока, но работают по-разному:

flatMap
Преобразует каждый элемент в новый поток и объединяет все потоки в один. Если исходный поток испускает элементы быстро, результирующие потоки могут накладываться.

switchMap
Также преобразует элементы в новые потоки, но отменяет предыдущий, если пришел новый элемент. Гарантирует обработку только последнего запроса.

Пример:

// flatMap: все запросы выполняются параллельно  
source.flatMap { api.fetchData(it) }  

// switchMap: отменяет предыдущий запрос при новом элементе  
source.switchMap { api.fetchData(it) }  

Итог:

  • flatMap — для независимых параллельных операций.
  • switchMap — для отменяемых задач (например, поиск с debounce).