在RxJava中,如何在链接可观察量时传递变量?

我正在使用RxJava链接异步操作,并且我想在下游传递一些变量:

Observable
   .from(modifications)
   .flatmap( (data1) -> { return op1(data1); })
   ...
   .flatmap( (data2) -> { 
       // How to access data1 here ?
       return op2(data2);
   })

这似乎是一种常见的模式,但我找不到有关它的信息。


答案 1

我从 Couchbase 论坛得到的建议是使用嵌套的可观察量:

Observable
    .from(modifications)
    .flatmap( (data1) -> { 
        return op1(data1)
            ...
            .flatmap( (data2) -> { 
                // I can access data1 here
                return op2(data2);
            })
        });

编辑:我会将此标记为可接受的答案,因为它似乎是最推荐的。如果您的处理太复杂而无法嵌套所有内容,则还可以使用函数调用检查解决方案。


答案 2

另一种可能性是将 的结果映射到包含变量的 a,并将其传递:op1org.apache.commons.lang3.tuple.Pair

Observable
   .from(modifications)
   .flatmap( (data1) -> {
       return op1(data1).map( obj -> { return Pair.of(data1,obj); });
   })
   ...
   .flatmap( (dataPair) -> { 
       // data1 is dataPair.getLeft()
       return op2(dataPair.getRight());
   })

它有效,但将变量隐藏在对/三重/...如果你使用Java 6表示法,它会变得非常冗长。

我想知道是否有更好的解决方案,也许一些RxJava运算符可以提供帮助?


推荐