Сравнение поведения flatMap, switchMap и concatMap в RxJava

При нормальном выполнении flatMap выдаст dx, cx, bx, ax; switchMap — только dx; concatMap — ax, bx, cx, dx. Для каждого варианта counter нужно заново установить в 4.

Короткий ответ

Что ответить на собеседовании

При нормальном выполнении flatMap выдаст dx, cx, bx, ax; switchMap — только dx; concatMap — ax, bx, cx, dx. Для каждого варианта counter нужно заново установить в 4.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой порядок вывода будет получен при замене (method) на каждый из операторов — flatMap, switchMap и concatMap, используя приведённый ниже код.

val items = mutableListOf("a", "b", "c", "d")

val counter = AtomicInteger(4)

Observable.fromIterable(items). (method) { item ->
  val delay = counter.decrementAndGet() * 10
  Observable.just(item + "x").delay(delay.toLong(), TimeUnit.SECONDS)
}
.doOnNext { println(it) }
.subscribe()

flatMap – варианты ответов:

  1. "ax", "bx", "cx", "dx"
  2. "dx", "cx", "bx", "ax"
  3. "bx", "cx", "ax", "dx" Ответ: второй вариант.

switchMap – варианты ответов:

  1. "ax", "bx", "cx", "dx"
  2. "dx", "cx", "bx", "ax"
  3. "dx" Ответ: третий вариант.

concatMap – варианты ответов:

  1. "dx"
  2. "dx", "cx", "bx", "ax"
  3. "ax", "bx", "cx", "dx" Ответ: третий вариант.

Ответ

При нормальном выполнении flatMap выдаст dx, cx, bx, ax; switchMap — только dx; concatMap — ax, bx, cx, dx. Для каждого варианта counter нужно заново установить в 4.

flatMap подписывается на внутренние источники параллельно: задержки 30, 20, 10 и 0 секунд задают ожидаемый порядок. switchMap отменяет предыдущий источник при следующем элементе. concatMap ждёт завершения очередного источника, сохраняя порядок входа, и задержки накапливаются. Программа должна оставаться запущенной до завершения: асинхронный delay не удерживает обычный main сам по себе. Реальные задержки планировщика не являются точным секундомером.

Источник: reactivex.io.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее