2017-02-15 6 views
1

私はしばらくの間RxJavaを使用していますし、自分自身を繰り返し、次のパターンに引っかかって頂いております:あなたは私はチェーンいくつかの下のポイントに必要見ることができるようにRxJava:マップ方式から連鎖する結果

source 
.map(a -> b) 
.map(b -> c) 
.map(d -> func(a,b,c)) 

以前のマッピング方法の結果の ラムダは最終的ではない外部パラメータを参照することができないため、これはJavaの制限であるかどうかはわかりませんが、これはRx-Extensionsに限られています。 私の現在の解決策は、a、b、cを保持するラッパーを使用し、それぞれをマップ内に追加し、ラッパー・クラスを戻すことです。しかし、この解決策は、書き込みを感じることはありません。

もっと良い解決策はありますか?

答えて

3

map sが互いに直接に従っている場合、あなたは、単一のマップにそれらを圧縮して、最終的な機能が利用可能なすべての中間データを持つことができます。

TUは、中間値の種類があり
source.map(a -> { 
    T b = fa(a); 
    U c = fc(b); 
    return func(a, b, c); 
}) 

それぞれbおよびcである。

+0

複数のマップの場合は問題ありません。一度フィルタやジップ、またはその他の組み合わせを使用すると動作しません – chaimt

+0

その後、各段階でラッパーを使用する必要があります。 – akarnokd