關於Rxjava操作符(實現接口嵌套功能)

  • 對事件序列中的事件 / 整個事件序列 進行加工處理(即變換),使得其轉變成不同的事件 / 整個事件序列

具體原理如下:
在這裏插入圖片描述

  • RxJava中常見的變換操作符如下:在這裏插入圖片描述

  • 數據類型轉換:Map()將事件的參數從 整型 變換成 字符串類型 爲例子說明

在這裏插入圖片描述

 // 採用RxJava基於事件流的鏈式操作
        Observable.create(new ObservableOnSubscribe<Integer>() {

            // 1. 被觀察者發送事件 = 參數爲整型 = 1、2、3
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);

            }
            // 2. 使用Map變換操作符中的Function函數對被觀察者發送的事件進行統一變換:整型變換成字符串類型
        }).map(new Function<Integer, String>() {
            @Override
            public String apply(Integer integer) throws Exception {
                return "使用 Map變換操作符 將事件" + integer +"的參數從 整型"+integer + " 變換成 字符串類型" + integer ;
            }
        }).subscribe(new Consumer<String>() {

            // 3. 觀察者接收事件時,是接收到變換後的事件 = 字符串類型
            @Override
            public void accept(String s) throws Exception {
                Log.d(TAG, s);
            }
        });
        
  • FlatMap()
    (1)作用:將被觀察者發送的事件序列進行 拆分 & 單獨轉換,再合併成一個新的事件序列,最後再進行發送
    (2)原理
  1. 爲事件序列中每個事件都創建一個 Observable 對象;
  2. 將對每個 原始事件 轉換後的 新事件 都放入到對應 Observable對象;
  3. 將新建的每個Observable 都合併到一個 新建的、總的Observable 對象;
  4. 新建的、總的Observable 對象 將 新合併的事件序列 發送給觀察者(Observer)

在這裏插入圖片描述

// 採用RxJava基於事件流的鏈式操作
        Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
            }

            // 採用flatMap()變換操作符
        }).flatMap(new Function<Integer, ObservableSource<String>>() {
            @Override
            public ObservableSource<String> apply(Integer integer) throws Exception {
                final List<String> list = new ArrayList<>();
                for (int i = 0; i < 3; i++) {
                    list.add("我是事件 " + integer + "拆分後的子事件" + i);
                    // 通過flatMap中將被觀察者生產的事件序列先進行拆分,再將每個事件轉換爲一個新的發送三個String事件
                    // 最終合併,再發送給被觀察者
                }
                return Observable.fromIterable(list);
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                Log.d(TAG, s);
            }
        });

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章