Ответ
flatMap и concatMap оба преобразуют поток элементов, но работают по-разному:
- flatMap – асинхронно обрабатывает элементы, объединяя их в один поток без гарантии порядка. Подходит, когда порядок не важен, а важна скорость.
- concatMap – сохраняет порядок, обрабатывая элементы последовательно.
Пример:
flowOf(1, 2, 3)
.flatMap { value ->
flow { emit(value); emit(value * 10) }
}
.collect { println(it) } // Может вывести: 1, 10, 2, 20, 3, 30 (но порядок не гарантирован)
Когда использовать:
flatMap– для параллельных задач (например, сетевых запросов).concatMap– когда важен порядок (например, последовательная обработка данных).