2017-01-19 7 views
2

Je dois améliorer un ancien service qui effectue plusieurs appels consécutifs au même service et fusionner tous les résultats dans une seule liste. Imaginez que nous ayons une liste de IDS = [1, 2 3, .. 6] Je dois donc appeler la même API avec chaque ID (avec rétrofit et Observables). Pour ce faire, je voudrais utiliser Rx Android, mais j'ai des doutes sur la façon de fusionner les résultats.Rx Android combiner plusieurs appels au même service en parallèle

 Integer[] ids = {1, 2, 3}; 

     Observable.from(ids) 
       .map(id -> mApi.getData(id)) 

Peut-on faire des appels parallèles et fusionner le résultat suivant le même ordre? Pour améliorer la réponse temporelle, l'idée est de le faire dans Parallel mais je ne sais pas comment être sûr que le résultat sera combiné en suivant le même ordre que les appels du serveur.

Je pensais utiliser concat (http://reactivex.io/documentation/operators/concat.html) mais il attend l'observable précédent à attendre.

Répondre

5

Voir concatMapEager et ses variantes.

Observable.fromArray(1, 2, 3) 
.concatMapEager(id -> 
    Observable.fromCallable(() -> mApi.getData(id)) 
    .subscribeOn(Schedulers.io()) 
) 
.subscribe(...);