Sobes.tech
Назад к вопросам
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 все элементы будут обработаны параллельно и объединены в один поток.