将 Observables (RxJava) 与 flatMap 连接起来

Concatenated Observables (RxJava ) with flapMap

我有一些使用 flatMap 的串联可观察对象,例如

api.call1()
.flatMap{a-> api.call2(a)}
.flatMap{b-> api.call3(a,b) //<- no access to a}

问题是,在第三个串联调用中,我需要从上一个调用中得到的结果,还需要从第一个调用中得到的结果

这是方案: A->(a)->B->(b)-> C( 需要 b 但也需要 a)->...

我试着这样解决:

1 种方法(在第二个中嵌套了第三个可观察对象)

api.call1()
    .flatMap{a-> api.call2(a).flatMap{b-> api.call3(a,b)}}

它有效,但我知道这不是一个好方法(因为从管道外部传递参数)

2 方法(更好但有很多样板文件)

api.call1().flatMap{ a-> 
    Observable.combineLatest(Observable.just(a),api.call2(a),
          BiFunction{  a,b -> Pair(a,b)})
           .flatMap(pair:Pair<A,B> -> api.call3(pair.first,pair.second))
}}

有人知道更好的方法(一些时尚运营商)

谢谢大家为我可怜的英国人感到难过。

flatMap 有第二个重载,它同时接受输入和输出。然后您可以将这些组合成一个 Pair 发送到下一个 flatMap

api.call1()
    .flatMap( 
        { a -> api.call2(a) },
        { a, b -> new Pair(a, b) }
    )
    .flatMap { pair-> api.call3(pair.first, pair.second) }