[英]Android using RXJava, How can I take an Observable with a list of integers and turn it into a list of ojects
所以这就是我到目前为止...
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>>)
任何帮助将不胜感激谢谢。
好吧,既然你的getIds()
方法返回一个Observable<List<Integer>>
在map
创建你的Func1
的正确方法是
.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();
}
这应该可以帮助您入门,如果您有不明白的地方,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.