所以这就是我到目前为止......
public Observable<List<Integer>> getIds() {
return Observable.create(new Observable.OnSubscribe<List<Integer>>() {
@Override
public void call(Subscriber<? super List<Integer>> subscriber) {
try {
subscriber.onNext(mSource.getIds());
} catch (Exception e) {
subscriber.onError(e);
}
}
});
}
这很好用,并为我提供了我试图创建的对象的ID列表
然后我需要一个函数来返回带有对象列表的Observer的订阅。我需要对getObject(int id)进行单独的api调用以获取每个对象。
public Subscription getObjectList(Observer<List<Object>> observer) {
return mService.getIds()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
// here is where i get lost...
.map(new Func1<Observable<Integer>, Observable<List>>)
感谢任何帮助。
答案 0 :(得分:1)
好吧,因为您的getIds()
方法返回Observable<List<Integer>>
,在Func1
中创建map
的正确方法将是
.map(new Func1<List<Integer>, List<Object>>() {
它接受一个整数列表,并将发出一个对象列表。我相信这正是你想要实现的目标。你的最终代码可能看起来像这样
public Subscription getObjectList(Observer<List<Object>> observer) {
return getIds()
.map(new Func1<List<Integer>, List<Object>>() {
@Override
public List<Object> call(List<Integer> integers) {
List<Object> objects = new ArrayList<Object>();
for (Integer id : integers) {
// Here's where you map each ids to an object and add it to the list
objects.add(getObject(id));
}
return objects;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
// Add your own code here to load the object based on the id.
private Object getObject(Integer id) {
return id;
}
// Replace with your own getIds from above
public Observable<List<Integer>> getIds() {
return Observable.from(1, 2, 3).toList();
}
这应该可以帮助您开始使用,如果您有什么不明白的地方,请告诉我。