Android RxJava使用介紹(五) RxJava的操作符

來源:互聯網
上載者:User

標籤:

本篇文章繼續介紹以下類型的操作符
- Mathematical and Aggregate Operators(Observable數學運算及彙總操作符)

一、Concat
Concat操作符將多個Observable結合成一個Observable並發射資料,並且嚴格按照先後順序發射資料,前一個Observable的資料沒有發射完,是不能發射後面Observable的資料的。
有兩個操作符跟它類似,但是有區別,分別是
1.startWith:僅僅是在前面插上一個資料。
2.merge:其發射的資料是無序的。

二、Count
Count操作符用來統計源Observable發射了多少個資料,最後將數目給發射出來;如果源Observable發射錯誤,則會將錯誤直接報出來;在源Observable沒有終止前,count是不會發射統計資料的。

下面使用Concat和Count操作符來結合多個Observable和統計發射資料的數目

private Observable<Integer> concatObserver() {        Observable<Integer> obser1 = Observable.just(1, 2, 3);        Observable<Integer> obser2 = Observable.just(4, 5, 6);        Observable<Integer> obser3 = Observable.just(7, 8, 9);        return Observable.concat(obser1, obser2, obser3);    }    private Observable<Integer> conuntObserver() {        return Observable.just(1, 2, 3).count();    }

分別進行訂閱

mLButton.setText("concat");mLButton.setOnClickListener(e -> concatObserver().subscribe(i -> log("concat:" + i)));mRButton.setText("conunt");mRButton.setOnClickListener(e -> conuntObserver().subscribe(i -> log("conunt:" + i)));

運行結果如下

三、Reduce、Collect
Reduce操作符應用一個函數接收Observable發射的資料和函數的計算結果作為下次計算的參數,輸出最後的結果。跟前面我們瞭解過的scan操作符很類似,只是scan會輸出每次計算的結果,而reduce只會輸出最後的結果。
Collect操作符類似於Reduce,但是其目的不同,collect用來將源Observable發射的資料給收集到一個資料結構裡面,需要使用兩個參數:
1.一個產生收集資料結構的函數。
2.一個接收第一個函數產生的資料結構和源Observable發射的資料作為參數的函數。


下面我們來使用一下reduce和collect操作符。同當初scan的例子一樣,我們使用一個裝了10個數字2的list建立源Observable。

private Observable<Integer> reduceObserver() {        return Observable.from(list).reduce((x, y) -> x * y);    }    private Observable<ArrayList<Integer>> collectObserver() {         return Observable.from(list).collect(() -> new ArrayList<>(), (integers, integer) -> integers.add(integer));    }

分別進行訂閱

mLButton.setText("reduce");mLButton.setOnClickListener(e -> reduceObserver().subscribe(i -> log("reduce:" + i)));mRButton.setText("collect");mRButton.setOnClickListener(e -> collectObserver().subscribe(i -> log("collect:" + i)));

運行結果如下

彙總操作符比較少,就到這裡了,本文中的原始碼見https://github.com/Chaoba/RxJavaDemo

Android RxJava使用介紹(五) RxJava的操作符

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.