繁体   English   中英

使用 RXJava 的 Android,如何将 Observable 与整数列表结合并将其转换为对象列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM