Ответ
flatMap и concatMap — операторы из RxJava, преобразующие элементы в потоки (Observable/Flowable).
Ключевое отличие: порядок обработки элементов.
- flatMap — параллельно обрабатывает элементы, порядок результирующих элементов не гарантируется.
Observable.range(1, 3)
.flatMap { i -> Observable.just(i, i * 10).delay(100, TimeUnit.MILLISECONDS) }
// Может выдать: 1, 2, 10, 3, 20, 30 (порядок не строгий)
- concatMap — сохраняет исходный порядок, обрабатывает элементы последовательно.
Observable.range(1, 3)
.concatMap { i -> Observable.just(i, i * 10).delay(100, TimeUnit.MILLISECONDS) }
// Гарантированно: 1, 10, 2, 20, 3, 30
Выбор:
flatMap— когда важен результат, а не порядок (например, сетевые запросы).concatMap— когда порядок критичен (например, операции с БД).