RxJava学习(三)concat和firstElement操作符的应用

concat操作符:串行合并多个观察者中的事件。
firstElement操作符:按照顺序依次遍历被观察者中事件,事件不为空,则停止遍历。

该例子为:我们平时开发中的数据缓存功能。
1.首先获取内存缓存中的数据,如果数据为空,获取硬盘缓存中的数据。
2.获取硬盘缓存中的数据,如果硬盘缓存中数据为空,则从网络中获取数据。
3.获取网络中的数据。
获取到数据之后发送事件。


private String memoryData;//内存缓存的数据
    private String diskData = "缓存中的数据";//磁盘缓存的数据
    private String netWorkData="网络中的数据";//网络获取的数据
    /**
     * 分别依次遍历,如果前面的数据为空,则往后面获取数据
     * 即1.先获取内存缓存的数据,如果为空
     * 2.获取磁盘缓存中的数据,如果为空
     * 3.获取网络的数据
     */
    private void getData(){
        //三个数据源封装成了三个被观察者对象
        Observable<String> observable1 = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                if(memoryData==null){
                    e.onComplete();
                }
                else{
                    e.onNext(memoryData);
                }
            }
        });
        Observable<String>  observable2= Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                if(diskData==null){
                    e.onComplete();
                }
                else{
                    e.onNext(diskData);
                }
            }
        });
        Observable<String>  observable3 = Observable.just(netWorkData);
        //对三个被观察者串行合并成一个队列
        Observable.concat(observable1,observable2,observable3)
                .firstElement()//从串行队列依次按顺序遍历事件,取出数据,如果取到,则发送事件,停止遍历。
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String o) throws Exception {
                        Log.e(TAG, "获取到的数据: "+ o);
                    }
                });
    }

输出结果:

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容