Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от 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 всички елементи ще бъдат обработени паралелно и обединени в един поток.