我有一个活动,你可以根据过滤器和地图的当前视口看到一堆地方。
所以我将这两个来源建模为Flowables
:
fun boundariesFlowable(): Flowable<Pair<LatLon, LatLon>>
fun filtersFlowable(): Flowable<FilterRequest>
其中,边界发出地图视区的左上角和右下角,过滤器只是发出用户应用的过滤器的任何更改。
现在,我想观察这两个源,以便每次它们中的任何一个更改时都会执行调用。这是我的请求电话:
fun refreshApplyFilter(id: Int, filter: FilterRequest): Single<FilterResponse>
问题是,我无法弄清楚如何组合这些触发源,或者如何对它们的发射执行调用。
我尝试仅对其中一个来源进行平面映射,但它需要一个Publisher
,而我的请求是Single
。
您可以使用 Flowable.combineLatest(( 运算符来观察多个源。如果其中任何一个发布新值,函数将被触发。
val res: Flowable<FilterResponse> = Flowable.combineLatest(boundariesFlowable(), filtersFlowable(), BiFunction<Pair<LatLon, LatLon>, FilterRequest, FilterRequest> { pair, filter ->
filter
}).flatMapSingle { filter -> refreshApplyFilter(0, filter) }