Как вызвать несколько API, возвращающих Observable <Response>, и объединить их ответы в один объект - PullRequest
0 голосов
/ 08 октября 2018

Мне нужно создать агрегированный POJO с именем скажем Product.java , вызвав несколько источников / API для отдыха (#sources может быть любым числом) и проанализировать их отдельные ответы (Observable ) для заполнениясоответствующие поля в Product.java

Observable.zip () своего рода удовлетворяют моим требованиям, но для них требуется фиксированный номер.of args, тогда как в моем случае #sources (args) может быть любым настраиваемым числом.

Есть ли общий / более чистый способ сделать это?

List<Source> sources = //Some configuration, where sources.size() 
// Call all source REST APIs in parallel where each returns an Observable<Response>
// Parse each Observable<Response> & populate the relevant fields in a shared Product.java Object. (No two responses will try to populate the same field in Product)

1 Ответ

0 голосов
/ 09 октября 2018

Если порядок не важен, просто .merge () и .scan ();если это важно, используйте .concat () вместо .merge ()

final Observable<MyContainer> myContainer = Observable
  .merge(sources)
  .scan(new MyContainer(), (myContainer, newProduct) -> {
     // add newProduct to myContainer
     return myContainer;
  })
...