"Carry" 到下一个 .map 的值

"Carry" value to next .map

可能标题有误导性。请随意更改。

我有一个发出值的 Observable(主题)。我想传递这个值来生成一个新的可观察对象(通过 flatMap),但也将它传递给 flatMap 的操作:

getAddressSubject
     .flatMap(latLng -> getApiManagerInstance().getAddress(latLng))
     .map(addressResponse ->{
          // here I want to use both latLng and addressResponse
          // e.g:
         createObject(latLng, addressResponse);
     })

这是我迄今为止最好的解决方案。

由于主题可以多次使用,因此您 "duplicate" 上下文,您将其中一个用作纯对象,另一个用于触发第二个可观察对象。 然后将它们压缩在一起:

zip(    getAddressSubject,
        getAddressSubject
                .throttleLast(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
                .flatMap(latLng -> getApiManagerInstance().getAddress(latLng)),
        (latLng, response) -> createObject(latLng, response)
))

您可以将 map 运算符移动到 flatMap 运算符中,例如:

getAddressSubject
    .flatMap(latLng ->
        getApiManagerInstance().getAddress(latLng).map(
           addressResponse -> createObject(latLng, addressResponse))
 )