Bootstrap

Rxjava(三)、操作符的使用

Android进阶系列之第三方库知识点整理。

知识点总结,整理也是学习的过程,如有错误,欢迎批评指出。

第一篇:Rxjava2(一)、基础概念及使用
第二篇:Rxjava2(二)、五种观察者模式及背压

终于到操作符了,我觉得rxjava2如此好用,绝对少不了操作符的功劳,下面这张图你就简单的扫一眼,别慌,我们慢慢啃。

上一篇讲了,rxjava有五种观察者创建模式,其中ObservableFlowable差不多,只是Flowable支持背压,而其它三种,都是简化版的Observable,所以,本篇以Observable方式来讲操作符的使用。

Observable源码

Observable是一个抽象类,继承ObservableSource

ObservableSource

一、创建操作符

这类操作符,创建直接返回Observable

1.1、嵌套回调事件
1.1.1、create

create是最常用的一个操作符,该操作符的参数中产生的emitter发射器,通过onNext不断给下游发送数据,也可以发送onCompleteonError事件给下游。

需要发送给下游的数据,就通过emitter.onNext()给下游发送。

当发送了onComplete或者onError事件后,下游停止接收剩下的onNext事件

示意图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RiA67RuB-1585813744640)(https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/create.png)]

方法:

static <T> Observable<T> create(ObservableOnSubscribe<T> source)

demo:

  Observable.create(new ObservableOnSubscribe<String>() {
   
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
   
                emitter.onNext("A");
                emitter.onNext("B");
                // .....
                emitter.onComplete();
            }
        }).subscribe(new Observer<String>() {
   
            @Override
            public void onSubscribe(Disposable d) {
   

            }

            @Override
            public void onNext(String s) {
   
                Log.d(TAG, "onNext: s=" + s);
            }

            @Override
            public void onError(Throwable e) {
   
                Log.e(TAG, "onError");
            }

            @Override
            public void onComplete() {
   
                Log.i(TAG, "onComplete");
            }
        });

结果:

1.2、复杂数据遍历

这类操作符,直接将一个数组集合拆分成单个ObJect数据依次发送给下游,也可以直接发送Object数据。

1.2.1、just

转换一个或多个 Object 数据,依次将这些数据发射到下游。

最多接收十个Object参数。

示意图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LkOwj266-1585813744643)(https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/just.item.png)]

方法:

A : 最多只接收十个参数。

Demo:

        Observable.just("A", "B", "C", "D")
                .subscribe(new Consumer<String>() {
   
                    @Override
                    public void accept(String s) throws Exception {
   
                        Log.d(TAG, "accept: s=" + s);
                    }
                });

结果:

1.2.2、fromArray

直接传入一个数组数据,操作符将数组里面的元素按先后顺序依次发送给下游,可以发送十个以上的数据。

示意图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCRxFkVB-1585813744647)(https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/from.png)]

方法:

static <T> Observable<T> fromArray(T... items)

Demo:

String[] data = new String[]{
   "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"};
        Observable.fromArray(data)
                .subscribe(new Consumer<String>() {
   
                    @Override
                    public void accept(String s) throws Exception {
   
                        Log.d(TAG, "fromArray--accept: s=" + s
                        );
                    }
                });

结果:

1.2.3、fromIterable

直接传入一个集合数据,操作符将集合里面的元素按先后顺序依次发送给下游,可以发送十个以上的数据。

示意图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XR31LkKj-1585813744650)(https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/fromIterable.png)]

方法:

static <T> Observable<T> fromIterable(Iterable<? extends T> source)

Demo:

        List<String> mData = new ArrayList<>();
        mData.add("A");
        mData.add("B");
        mData.add("C");
        Observable.fromIterable(mData)
                .subscribe(new Consumer
;