gpt4 book ai didi

java - 使用 flatMap 连接 Observables (RxJava )

转载 作者:行者123 更新时间:2023-12-02 01:28:40 25 4
gpt4 key购买 nike

我有一些使用 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)}}

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

两种方法(更好,但有很多样板)

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) }

关于java - 使用 flatMap 连接 Observables (RxJava ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56458878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com