Что такое оператор switchMap в RxJava

Ответ

switchMap — оператор в RxJava, который преобразует элементы потока в новые Observable, но отменя предыдущие подписки при поступлении новых элементов.

Применение:

  • Часто используется для обработки последовательных запросов (например, поиск с отменой предыдущего запроса).
  • Гарантирует, что активен только последний Observable.

Пример:

searchInputObservable
    .switchMap { query -> 
        api.search(query) // Отменяет предыдущий запрос при новом вводе
    }
    .subscribe { results -> 
        updateUI(results) 
    }

Отличие от других операторов:

  • concatMap — сохраняет порядок запросов.
  • flatMap — выполняет все запросы параллельно.
  • switchMap — оставляет только последний.

Ответ 18+ 🔞

А, ну это та самая штука, которая как последний писк моды в твоём приложении — только самое свежее, всё старое нахуй в топку! switchMap, блядь.

Представь себе: у тебя есть поле поиска, и пользователь строчит туда как из пулемёта. "А", потом "Ай", потом "Айфо", потом "Айфон". Если на каждый чих лететь на сервер и ждать ответа, то получится каша из результатов, и покажутся тебе "Ай", когда уже давно "Айфон" вбили, ёпта. Пользователь обосрётся от злости.

Так вот, switchMap — это такой крутой пацан, который говорит: "Слушай сюда, мудила. Новый запрос пришёл? Старый — нахуй, отписываемся, отменяем, в топку. Работаем только с последним. Нечего тут старьё тащить".

Код его работы, он простой, как три копейки:

searchInputObservable
    .switchMap { query -> 
        api.search(query) // Предыдущий запрос летит в пизду, если новый уже тут
    }
    .subscribe { results -> 
        updateUI(results) // Получаем только актуальные результаты, ебать!
    }

А теперь, чтобы не быть совсем уж тупым, чем он не брат своим операторам-близнецам:

  • concatMap — Это законопослушный очкарик. Получил задачи "А", "Б", "В" — он их в этой же очереди и выполнит, даже если "В" пришло первым. Порядок священен, блядь.
  • flatMap — Это раздолбай-анархист. Кинул ему задачи — он все их запустил одновременно, а как придут результаты, так и придут, хрен пойми в каком порядке. Овердохуища параллелизма.
  • switchMap — А это — циничный прагматик, хитрая жопа. Ему главное — последняя указание. "А" сделал? Похуй, новое "Б" пришло — бросай "А", делай "Б". "В" пришло? Да похуй на "Б", делай "В"! Только самый свежий результат имеет значение. Идеально для поиска, лайков и прочей динамики, где прошлое уже никому не упало.

Вот и вся философия, ебать мои старые костыли. Хочешь только последнее и актуальное — switchMap твой бронежилет от говнокода.