Сцепление N зависимых наблюдаемых - PullRequest
1 голос
/ 03 августа 2020

Я новичок в реактивном программировании и познакомился с RxJava2 в Android. На данный момент я столкнулся с простыми проблемами, такими как архивирование наблюдаемых объектов. Но теперь возникло что-то новое, я пытаюсь объяснить.

Предположим, у меня есть список запросов Observable<List<Request>>. Я хочу вызвать веб-службу, которая возвращает для каждого запроса список маршрутов (завернутый в Observable). Я проверил такие вопросы, как this , но в этом случае я думаю, что не могу сопоставить наблюдаемое и список наблюдаемых.

Как я могу это сделать? Есть ли другой оператор?

1 Ответ

2 голосов
/ 03 августа 2020

Вы можете свернуть Observable<List<Request>> в Observable<Request>, используя flatMapIterable. Предполагая, что у вас есть вспомогательный метод с подписью Observable<List<Route>> getListOfRoutes(Request request) { ... }, вы можете сделать это:

Observable<List<Request>> obs = ...;
obs.flatMapIterable(l -> l)
   .flatMap(request -> getListOfRoutes(request)
       .doOnNext(routes -> request.setRoutes(routes))
       .map(ign -> request)
   )
   ...

Это предполагает, что вы в конечном итоге хотите, чтобы Observable<Request> передавался ниже по потоку. Если вам нужен другой тип, вы можете сделать что-то другое в операторе map в соответствии с вашими потребностями.

...