Какие основные отличия между операторами flatMapLatest и flatMapMerge в реактивном программировании?

В реактивном программировании, например в Kotlin Flow, операторы flatMapLatest и flatMapMerge используются для преобразования элементов потока в новые потоки, но отличаются по поведению при появлении новых элементов:

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

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

В реактивном программировании, например в Kotlin Flow, операторы flatMapLatest и flatMapMerge используются для преобразования элементов потока в новые потоки, но отличаются по поведению при появлении новых элементов:

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

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

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

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку