Android 在RxJava中合并父详细信息请求

Android 在RxJava中合并父详细信息请求,android,rx-java,Android,Rx Java,我有一个从服务器获取的a类对象列表。除其他项目外,此类A包含ID列表。然后使用这些ID检索B类对象的列表 我有返回的函数 Observable<List<A>> 可观察 及 可观察 到位 我希望使用RxJava检索A对象列表,然后检索每个A对象的B对象列表,并将B对象分配给它们所属的A对象,因此我希望最终得到一个类似以下内容的复合对象列表: class Details { public A a; public List<B> listOf

我有一个从服务器获取的a类对象列表。除其他项目外,此类A包含ID列表。然后使用这些ID检索B类对象的列表

我有返回的函数

Observable<List<A>>
可观察

可观察
到位

我希望使用RxJava检索A对象列表,然后检索每个A对象的B对象列表,并将B对象分配给它们所属的A对象,因此我希望最终得到一个类似以下内容的复合对象列表:

class Details {
    public A a;
    public List<B> listOfB;
}
类详细信息{
公共A;
公开名单b;
}
返回

Observable<List<Details>>
可观察

谢谢

如您所述,假设您具有以下功能:

Observable<List<A>> getAList()
主要功能是:

public Observable<List<Details>> getDetailsList() {
    return getAList()
            .flatMap(new Func1<List<A>, Observable<A>>() {
                @Override
                public Observable<A> call(List<A> aList) {
                    return Observable.from(aList);
                }
            }).flatMap(new Func1<A, Observable<Details>>() {
                @Override
                public Observable<Details> call(A a) {
                    return getBFromAList(a.idList)
                            .zipWith(Observable.just(a), new Func2<List<B>, A, Details>() {
                                @Override
                                public Details call(List<B> bs, A a) {
                                    Details details = new Details();
                                    details.a = a;
                                    details.listOfB = bs;
                                    return details;
                                }
                            });
                }
            }).toList();

}
public可观察的getDetailsList(){
return getAList()
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(列表列表列表){
从(列表)中可观察到的返回;
}
}).flatMap(新函数1(){
@凌驾
公共可观测呼叫(A){
返回getBFromAList(a.idList)
.zipWith(Observable.just(a),new Func2(){
@凌驾
公共详细信息呼叫(列表bs,A){
详细信息=新的详细信息();
详情a=a;
details.listOfB=bs;
退货详情;
}
});
}
}).toList();
}

如您所述,假设您具有以下功能:

Observable<List<A>> getAList()
主要功能是:

public Observable<List<Details>> getDetailsList() {
    return getAList()
            .flatMap(new Func1<List<A>, Observable<A>>() {
                @Override
                public Observable<A> call(List<A> aList) {
                    return Observable.from(aList);
                }
            }).flatMap(new Func1<A, Observable<Details>>() {
                @Override
                public Observable<Details> call(A a) {
                    return getBFromAList(a.idList)
                            .zipWith(Observable.just(a), new Func2<List<B>, A, Details>() {
                                @Override
                                public Details call(List<B> bs, A a) {
                                    Details details = new Details();
                                    details.a = a;
                                    details.listOfB = bs;
                                    return details;
                                }
                            });
                }
            }).toList();

}
public可观察的getDetailsList(){
return getAList()
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(列表列表列表){
从(列表)中可观察到的返回;
}
}).flatMap(新函数1(){
@凌驾
公共可观测呼叫(A){
返回getBFromAList(a.idList)
.zipWith(Observable.just(a),new Func2(){
@凌驾
公共详细信息呼叫(列表bs,A){
详细信息=新的详细信息();
详情a=a;
details.listOfB=bs;
退货详情;
}
});
}
}).toList();
}
public Observable<List<Details>> getDetailsList() {
    return getAList()
            .flatMap(new Func1<List<A>, Observable<A>>() {
                @Override
                public Observable<A> call(List<A> aList) {
                    return Observable.from(aList);
                }
            }).flatMap(new Func1<A, Observable<Details>>() {
                @Override
                public Observable<Details> call(A a) {
                    return getBFromAList(a.idList)
                            .zipWith(Observable.just(a), new Func2<List<B>, A, Details>() {
                                @Override
                                public Details call(List<B> bs, A a) {
                                    Details details = new Details();
                                    details.a = a;
                                    details.listOfB = bs;
                                    return details;
                                }
                            });
                }
            }).toList();

}