"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))
)
可能标题有误导性。请随意更改。
我有一个发出值的 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))
)