我有一个从服务器获得的A类对象列表。除了其他项目之外,该A类还包含ID列表。然后使用这些ID来检索B类对象的列表。
我有返回的函数
Observable<List<A>>
和
Observable<B>
到位。
我想使用RxJava检索A对象列表,然后检索每个A对象的B对象列表,并将B对象分配给它们所属的A对象,所以我想最终得到一个类似于此的复合对象的列表:
class Details {
public A a;
public List<B> listOfB;
}
并返回
Observable<List<Details>>
谢谢!
答案 0 :(得分:2)
如您所述,假设您具有以下功能:
Observable<List<A>> getAList()
和
Observable<B> getB(Long id)
基本上,您需要使用Observable.from
方法将列表解耦为单个元素,当然Observable.flatMap
来转换Observable
&#39>。
创建帮助函数以从B
列表中获取A
列表:
public Observable<List<B>> getBFromAList(List<Long> idList) {
return Observable.from(idList)
.flatMap(new Func1<Long, Observable<B>>() {
@Override
public Observable<B> call(Long id) {
return getB(id);
}
})
.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();
}