Назад к вопросам
Junior — Middle
67
Какие основные отличия между операторами flatMapLatest и flatMapMerge в реактивном программировании?
Ответ от нейросети
sobes.tech AI
В реактивном программировании, например в Kotlin Flow, операторы flatMapLatest и flatMapMerge используются для преобразования элементов потока в новые потоки, но отличаются по поведению при появлении новых элементов:
-
flatMapLatest: при поступлении нового элемента отменяет предыдущий внутренний поток и переключается на новый. Это полезно, когда важен только последний результат, например, при поиске с автодополнением.
-
flatMapMerge: запускает все внутренние потоки параллельно и объединяет их результаты, не отменяя предыдущие. Используется, когда нужно обработать все запросы одновременно.
Пример:
flowOf(1, 2, 3)
.flatMapLatest { value -> flow {
emit(value)
delay(100)
emit(value * 10)
} }
// При flatMapLatest будет обработан только последний элемент (3), предыдущие отменятся.
flowOf(1, 2, 3)
.flatMapMerge { value -> flow {
emit(value)
delay(100)
emit(value * 10)
} }
// При flatMapMerge все элементы будут обработаны параллельно и объединены в один поток.