2016-09-30 8 views
0

私はサーバから取得したクラスAのオブジェクトのリストを持っています。このクラスAは、他の項目の中でも、IDのリストを含む。これらのIDは、その後、私は場所に RxJavaで親の詳細要求を結合する

Observable<B> 

Observable<List<A>> 

を返す関数を持つクラスB

のオブジェクトの一覧を取得するために使用されています。

RxJavaを使用してAオブジェクトのリストを取得し、各AオブジェクトのBオブジェクトのリストを取得し、そのBオブジェクトを所属するAオブジェクトに割り当てたいと思います。これに似たいくつかの複合オブジェクトのリストに:

class Details { 
    public A a; 
    public List<B> listOfB; 
} 

Observable<List<Details>> 

感謝を返します!

答えて

2

と仮定あなたが説明するように、あなたが機能を持っている:

Observable<List<A>> getAList() 

Observable<B> getB(Long id) 

基本的には単一の要素にリストを切り離すためにObservable.from方法を利用するために必要な、そしてもちろんのObservable.flatMapへ変換Observableのです。

AのリストからBのリストを取得するヘルパー関数を作成します。

public Observable<List<B>> getBFromAList(List<Long> idList) { 
    return Observable.from(idList) 
      .flatMap(new Func1<Long, Observable<B>>() { 
       @Override 
       public Observable<B> call(Long id) { 
        return getB(id); 
       } 
      }) 
      .toList(); 
} 

と主な機能:

public Observable<List<Details>> getDetailsList() { 
    return getAList() 
      .flatMap(new Func1<List<A>, Observable<A>>() { 
       @Override 
       public Observable<A> call(List<A> aList) { 
        return Observable.from(aList); 
       } 
      }).flatMap(new Func1<A, Observable<Details>>() { 
       @Override 
       public Observable<Details> call(A a) { 
        return getBFromAList(a.idList) 
          .zipWith(Observable.just(a), new Func2<List<B>, A, Details>() { 
           @Override 
           public Details call(List<B> bs, A a) { 
            Details details = new Details(); 
            details.a = a; 
            details.listOfB = bs; 
            return details; 
           } 
          }); 
       } 
      }).toList(); 

} 
+0

素晴らしい、感謝を!そのジップが鍵だった。 – Francesc

関連する問題