“携带”值到下一个.map

时间:2015-01-20 11:07:48

标签: rx-java

标题可能会产生误导。请随意改变。

我有一个Observable(Subject),它发出一个值。我想传递这个值来生成一个新的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);
     })

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

到目前为止,这是我最好的解决方案。

由于受试者可以多次使用,因此重复使用#34;上下文,你使用其中一个作为纯,另一个触发第二个observable。 然后你将它们压缩在一起:

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