RxJava:链接地图方法的结果

时间:2017-02-15 14:00:18

标签: java rx-java

我使用RxJava已经有一段时间了,并且已经陷入了以下重复的模式:

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

正如您所看到的,我需要在链的较低点获得先前映射方法的一些结果。 我不确定这是否是java限制,因为lambda不能引用非final的外部参数,或者这是对Rx-Extensions的限制。 我目前的解决方案是使用包含a,b,c的包装器,并在地图中添加每个包装器,然后返回包装器类。但是这个解决方案并没有感觉到写作。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

如果map直接相互跟随,您可以将它们压缩成一个地图,并将所有中间数据提供给最终功能:

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

其中TU分别是bc的中间值的类型。