2017-05-04 14 views
3

連続して実行されている5-6個のシングルオブザーバを連鎖させるベストプラクティスは何ですか? たとえば、私はSingle1-> Single2-> ... - > Single6を持っています。連続して複数のオブザーバを連鎖する

Single2はSingle1の結果に依存します。 Single3はSingle2の結果などに依存します。

私はflatMapのネストを使用していますが、コードは本当に長くなり、読みやすさは本当に低くなります。

このケースではどのようなガイドラインが最適ですか?あなたが巣にflatMap呼び出しを必要としない

答えて

0

、あなたは、単にそれらをチェーンし、観察可能なストリームの明確なチェーンを取得することができます:

single1 
    .flatMap(new Func1<Item1, Single<Item2>>() { 
     @Override 
     public Single<Item2> call(Item1 obj) { 
      return getSingle2(obj); 
     } 
    }) 
    .flatMap(new Func1<Item2, Single<Item3>>() { 
     @Override 
     public Single<Item3> call(Item2 obj) { 
      return getSingle3(obj); 
     } 
    }) 
    .flatMap(new Func1<Item3, Single<Item4>>() { 
     @Override 
     public Single<Item4> call(Item3 obj) { 
      return getSingle4(obj); 
     } 
    }) 
    .flatMap(new Func1<Item4, Single<Item5>>() { 
     @Override 
     public Single<Item5> call(Item4 obj) { 
      return getSingle5(obj); 
     } 
    }) 
    .flatMap(new Func1<Item5, Single<Item6>>() { 
     @Override 
     public Single<Item6> call(Item5 obj) { 
      return getSingle6(obj); 
     } 
    }); 

とラムダと、それは本当にきちんと取得できます

single1 
    .flatMap(this::getSingle2) 
    .flatMap(this::getSingle3) 
    .flatMap(this::getSingle4) 
    .flatMap(this::getSingle5) 
    .flatMap(this::getSingle6); 
関連する問題