1. 程式人生 > >初識RxJava(一)建立類 操作符

初識RxJava(一)建立類 操作符

前言:

眾所周知RxJava是個好東西,至於好在哪裡大家相信大家都看過了百度出來的第一篇文章就是 拋物線的這篇文章 《給 Android 開發者的 RxJava 詳解》,這篇文章很好,但是像我一樣的讀得懵懵懂懂得人應該也是大有人在吧,而且是關於RxJava 1.0版本的,現在已經是Rxjava 2.0 時代了,好多東西已經發生了變化,那麼我推薦各位看這位大佬 Season_zlc 的文章,寫的賊棒,筆者是折服了 ,專題連結:RxJava2.x 。但是筆者認為讀了這些還不夠,RxJava 還有大量的操作符需要我們進行探索,不太監了,筆者為大家帶來關於 RxJava 的各種操作符的相關筆記,共勉,共勉。

正題:

開篇一張圖,剩下的全靠編。。。而且圖還是盜圖 。╮(╯﹏╰)╭
RxJava 操作符彙總

筆者的筆記是基於 RxJava 2.0 入手,不研究原始碼,因為筆者水平不夠,會用就好了嘛,嘿嘿嘿!首先,先引入依賴 : RxJava

implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.3'

1、create 基本建立符

1)、基礎寫法
  //建立被觀察者
        Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {

                logDUtils("observable  onNext:1");
                emitter.onNext(1);
                logDUtils("observable  onNext:2");
                emitter.onNext(2);
                logDUtils("observable  onNext:3");
                emitter.onNext(3);
                logDUtils("observable  onNext:4");
                emitter.onNext(4);

                logDUtils("observable  onComplete");
                emitter.onComplete();

                logDUtils("observable  onNext:5");
                emitter.onNext(5);
            }
        });
        
        //建立觀察者
        Observer<Integer> observer = new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {
                logDUtils("onSubscribe:" + d.toString());
            }

            @Override
            public void onNext(Integer integer) {
                logDUtils("onNext:" + integer);
            }

            @Override
            public void onError(Throwable e) {
                logDUtils("onError:" + e.getMessage());
            }

            @Override
            public void onComplete() {
                logDUtils("onComplete:");
            }
        };
        //進行訂閱
        observable.subscribe(observer);
2)、鏈式呼叫
    private void createMethod() {
        Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                //建立被觀察物件
                emitter.onNext(1);
                //結束髮送
                emitter.onComplete();
            }
        }).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Integer integer) {
            //接收被觀察物件傳送的 物件
            }

            @Override
            public void onError(Throwable e) {
            //接收 onError 事件 ,做出相應反應
            }

            @Override
            public void onComplete() {
             //事件處理完成,做出相應處理
            }
        });
    }

使用效果

3)、作用

完整建立1個被觀察者物件(Observable)
屬於 RxJava 最基本的建立符

2、just 快速建立符

1)、作用

建立1個被觀察者物件
直接傳送 傳入的事件(逐一發送)

最多隻能傳送 10 個事件

2)、程式碼

  private void justMethod() {
        Observable.just(1,2,3,4,5).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {
                logDUtils("onSubscribe:" );
            }

            @Override
            public void onNext(Integer integer) {
                logDUtils("onNext:" + integer);
            }

            @Override
            public void onError(Throwable e) {
                logDUtils("onError:" + e.getMessage());
            }

            @Override
            public void onComplete() {
                logDUtils("onComplete:");
            }
        });

    }

效果

3、fromeArray 傳送陣列內資料

1)、作用

建立1個被觀察者物件
直接傳送 傳入的陣列資料(逐一發送) 相當於遍歷

2)、程式碼
 /**
     * fromArray 操作符
     */
    private void arrayMethod() {

        String str[] = {"AAA", "BBB", "CCC", "DDD"};

        Observable.fromArray(str).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                logDUtils("onSubscribe:");
            }

            @Override
            public void onNext(String s) {
                logDUtils("onNext:" + s);
            }

            @Override
            public void onError(Throwable e) {
                logDUtils("onError:" + e.getMessage());
            }

            @Override
            public void onComplete() {
                logDUtils("onComplete:");
            }
        });
    }
3)、效果

效果

4、fromIterable 操作符

1)、作用

建立1個被觀察者物件
直接傳送 傳入的集合 List 內資料(相當於遍歷)

2)、程式碼
 /**
     *fromIterable 操作符
     */
    private void listMethod() {
        ArrayList<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        list.add("555");
        Observable.fromIterable(list).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                logDUtils("onSubscribe:");
            }

            @Override
            public void onNext(String s) {
                logDUtils("onNext:" + s);
            }

            @Override
            public void onError(Throwable e) {
                logDUtils("onError:" + e.getMessage());
            }

            @Override
            public void onComplete() {
                logDUtils("onComplete:");
            }
        });
    }
3)、效果

效果