В чем разница между map и flatMap в RxJava

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

Ответ

map и flatMap — операторы преобразования в RxJava, но работают по-разному:

  • map — преобразует каждый элемент потока в другой элемент синхронно.
    Пример:
    Observable.just(1, 2, 3)
        .map { it * 2 } // 2, 4, 6
  • flatMap — преобразует каждый элемент в новый Observable (может быть асинхронным), затем объединяет их в один поток. Порядок элементов не гарантируется.
    Пример:
    Observable.just(1, 2, 3)
        .flatMap { Observable.just(it, it * 10) } // 1, 10, 2, 20, 3, 30

Ключевое отличие:
map — 1 элемент → 1 значение.
flatMap — 1 элемент → Observable (множество значений).

Для сохранения порядка используй concatMap.