如何在RxJava中的一个对象中组合两个对象?
我有Data和DataDetail类,每个类都包含与它们相邻的数据 不要包含。 我有一个从后端获取的列表类, 有了具有id字段的数据,我可以请求DataDetail,DataDetail有一些在数据对象中为空的信息,所以我可以从DataDetail获取并在数据类中设置如何在RxJava中的一个对象中组合两个对象?,java,android,rx-java2,Java,Android,Rx Java2,我有Data和DataDetail类,每个类都包含与它们相邻的数据 不要包含。 我有一个从后端获取的列表类, 有了具有id字段的数据,我可以请求DataDetail,DataDetail有一些在数据对象中为空的信息,所以我可以从DataDetail获取并在数据类中设置 `fetchData() .toFlowable() .flatMapIterable(datas->datas).map(new Function<Data, Flowable<DataDetail>&g
`fetchData()
.toFlowable()
.flatMapIterable(datas->datas).map(new Function<Data, Flowable<DataDetail>>() {
@Override
public Flowable<DataDetail>`apply(@io.reactivex.annotations.NonNull Data data) throws Exception {
return
`fetchData()
.toFlowable()
.flatMapIterable(数据->数据).map(新函数(){
@推翻
public Flowable`apply(@io.reactivex.annotations.NonNull数据)引发异常{
返回
fetchDataDetail(data()).toFlowable();
}
})
.map(新函数(){
@推翻
公共可流动应用(@io.reactivex.annotations.NonNull DataDetail)引发异常{
return//我想要访问数据和dataDetail对象}
})
.toList();
.map()?在作为参数的map中,我得到可流动的DataDetail对象,
可流动,但我需要访问Data和DataDetail,才能从DataDetail中获取一些数据并在Data object中设置,我相信这就是api返回的内容
api.getList() // this returns a Single<List<Data>>
api.getList()//返回一个
如果这是正确的,那么这就是你想要达到的目标
Single<List<Pair<Data,Detail>>> dataSingle = api.getList()
.toFlowable()
.flatMap(Flowable::fromIterable) // Convert the list to single emissions
.flatMap(data -> {
// Make api call to get details
return api.getDetails(data.getId())
.flatMap(dataDetails -> {
return Flowable.just(Pair.create(data,dataDetail));
});
}).toList();
Single dataSingle=api.getList()
.toFlowable()
.flatMap(Flowable::fromIterable)//将列表转换为单个排放
.flatMap(数据->{
//进行api调用以获取详细信息
返回api.getDetails(data.getId())
.flatMap(数据详细信息->{
返回Flowable.just(Pair.create(data,dataDetail));
});
}).toList();
显然,如果您需要将其转换为Flowable
,您可以使用toFlowable
轻松实现
对
来自android.support.v4.util.Pair
。理想情况下,您可以创建一个单独的模型来表示数据
和细节
中的数据。但是,作为一种快速破解,您可以使用对
希望有帮助。谢谢,但是有了单机,我就不知道如何向前移动,从细节中获取数据并设置在数据对象中。这两个数据都有你的数据。你可以决定如何改变<代码>数据< /代码>对象。或者按照我的建议,考虑创建一个新的模型。创建一个名为
createUiModel(Data Data,DataDetails details)
的方法。在该方法中,创建UiModel
以及所有与您相关的属性。或者,如果出于某种原因,您确实想修改数据对象,您可以在.flatMap(DataDetails->{Data.setYourField)中执行此操作(dataDetail.getYourField())
然后返回Flowable。只返回(data)
而不是返回一对。