RxJava: обновить результат вызова результатами последующих вызовов

У меня есть 2 вызова:

  1. getItems() - возвращает List<Item>, также Item имеет поле id
  2. getParam(id) - возвращает Param

Мне нужно сделать getItems(), а затем getParam(id) для каждого Item в List, а затем нужно обновить каждый Item с полученным Param

Мой вопрос:

Как я могу сделать это с помощью RxJava?

            api.getItems()
                    .flatMapIterable(new Func1<List<Item>, Iterable<Item>>() {
                        @Override
                        public Iterable<Item> call(List<Item> items) {
                            return items;
                        }
                    })
                    .flatMap(new Func1<Item, Observable<?>>() {
                        @Override
                        public Observable<?> call(Item item) {
                            return api.getParam(item.id)
                        }
                    }),

                    ...

                    .subscribe(...);

Заранее спасибо.


person mobiledev Alex    schedule 17.12.2015    source источник
comment
Возможно, это помогает объединить результаты обоих ваших вызовов: -android/26376704#26376704" title="как ждать несколько вложенных асинхронных вызовов с помощью rxjava android"> stackoverflow.com/questions/26356852/   -  person david.mihola    schedule 17.12.2015


Ответы (1)


Используйте двухпараметрический flatMap; второй параметр — это Func2, который будет получать как исходный элемент, так и каждый результат вызова первого параметра.

person Tassos Bassoukos    schedule 17.12.2015