当前位置:  开发笔记 > 编程语言 > 正文

使用RxJava/RxAndroid迭代列表

如何解决《使用RxJava/RxAndroid迭代列表》经验,为你挑选了1个好方法。

我是RxJava/RxAndroid的新手但是我的用例很困难.

我尝试迭代a List将每个A转换为B异步(因为它需要调用数据库),我Observer应该在每次成功转换(in onNext())时通知我在主线程上做一些工作.

我成功地设法转换整个列表,然后收到我的List,onNext()但我需要收到每个项目的通知,而不是所有项目完成后.

我试图与运营商的东西from,但如果我用from(List)我的Observer必须是同一类型(receivied对象A,而不是B).

以下是我的代码如何将整个转换Listlist我应该在这里更改的内容?

private List listOfA;

private startConversion() {
    Observer observer = new Observer>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @Override
        public void onNext(List convertedItems) {
            onConversionCompleted(convertedItems);
        }
    };

    Observable observervable = Observable.fromCallable(new Callable>() {
        @Override
        public List call() throws Exception {
            return convertListOfAToListOfB(listOfA);
        }
    });

    subscription = observable
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
}

PS:这是伪代码.

感谢帮助 !



1> Anton Pogone..:

如果你想在单独的线程中逐个转换每个项目,你可以这样做.

    Observable.from(list)    
            .map(input -> {
                // transform each A -> B
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(item -> {

            });

如果你已经有了可观察的发射列表并希望将其转换为序列,请使用:

        listObservable
            .flatMap(Observable::from)
            .subscribe(item -> {

            });

如果你想结合这两种方式并在一个地方转换所有值但是逐个发出它们你可以这样做:

    Observable.create(subscriber -> {
        for (Item item : items) {
            subscriber.onNext(transformA2B(item));
        }

        subscriber.onCompleted();
    });

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有