2017-08-18 7 views
0

は、私は、次のコードを持っています。どうすれば修正できますか? 私はこのような何か試してみました:RxJava Single.concat

Single.concat(model.getCategories(), model.getUnits()) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Action1<List<? extends Object>>() 
       { 
        @Override 
        public void call(List<? extends Object> objects) 
        { 
         // do something 
        } 
       }); 

をしかし、問題は、私はそれがList<Category>またはList<Unit>来ているかどうかを確定することができないということです。

concatを使用して、どのような種類のストリーム(List<Category>またはList<Unit>など)が来るかを検出する方法はありますか?

また、すべてのオブザーバが完了して別の操作を実行することを検出する必要があります。

アドバイスありがとうございます。

答えて

1

使用Single.zip()Pair任意のタプル実装、すなわち、thisことができる

Single.zip(
    getCategories().subscribeOn(Schedulers.io()), 
    getUnits().subscribeOn(Schedulers.io()), 
    (a, b) -> Pair.of(a, b) 
) 
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe(
    pair -> view.showAddProductDialog(pair.first, pair.second), 
    error -> showError(error.toString()) 
) 

+0

私は、このサンプルではうまくいくはずですが、2だけでなく、より多くのネストされたアクションがある場合はどうでしょうか。 – Andrey

+0

Protip:[javadoc](http://reactivex.io/RxJava/2.x /javadoc/io/reactivex/Single.html#zip(io.reactivex.SingleSource,%20io.reactivex.SingleSource,%20io.reactivex.SingleSource,%20io.reactivex.functions.Function3))および/またはどのメソッドがpopをオーバーロードするか「Single」と入力すると、IDEのコンテンツアシストが起動します。 – akarnokd