2017-02-15 41 views
1

我使用RxJava了一段時間,並已得到了被困在下面的圖案重演鏈接結果:RxJava:從地圖方法

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

正如你可以看到我需要在鏈的較低點一些來自以前的映射方法的結果。 我不確定這是否是java限制,因爲lambda無法引用不是最終的外部參數,或者這是對Rx-Extensions的限制。 我目前的解決方案是使用包含a,b,c的包裝 - 並在地圖中添加每個包裝,然後返回包裝類。但是這個解決方案並不覺得寫。

有沒有更好的解決方案?

回答

3

如果map小號直接跟隨對方,你可以壓縮成一個單一的地圖,並有提供給最終函數的所有中間數據:

source.map(a -> { 
    T b = fa(a); 
    U c = fc(b); 
    return func(a, b, c); 
}) 

TU是類型的中間值分別爲bc

+0

在多個地圖的情況下可以。但一旦你有一個過濾器或zip或任何其他組合它不會工作 – chaimt

+0

然後,你必須在每個階段使用包裝。 – akarnokd