如何在RxJava中的一个对象中组合两个对象?

如何在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

我有Data和DataDetail类,每个类都包含与它们相邻的数据 不要包含。 我有一个从后端获取的列表类, 有了具有id字段的数据,我可以请求DataDetail,DataDetail有一些在数据对象中为空的信息,所以我可以从DataDetail获取并在数据类中设置

`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)
而不是返回一对。