RxJava Operator (8) Aggregate
In this article we will take a look at Rxjava’s aggregation operator.
1. Contact
The Contact operator combines multiple Observables into one Observable and emits data, and emits data in strict order. If the data of the previous Observable has not been emitted, the subsequent Observable cannot be emitted. Data.
There are two operators similar to it, but there are differences, namely
1. startWith: just insert a data in front.
2.merge: The data emitted is unordered.
2. Count
The Count operator is used to count how many data the source Observable has emitted, and finally emit the number; if the source Observable emits an error, the error will be reported directly; Count will not emit statistical data until the source Observable is terminated.
Use the Contact and Count operators below to combine multiple Observables and count the number of emitted data
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>private Observable<Integer> contactObserver() {<br /></li><li>Observable<Integer> obser1 = Observable.just(1, 2, 3);<br /></li><li>Observable<Integer> obser2 = Observable.just(4, 5, 6);<br /></li><li>Observable<Integer> obser3 = Observable.just(7, 8, 9);<br /></li><li>return Observable.concat(obser1, obser2, obser3);<br /></li><li>}<br /></li><li>private Observable<Integer> conuntObserver() {<br /></li><li>return Observable.just(1, 2, 3).count();<br /></li><li>}</li></ol>
Copy after login
Subscribe separately
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>mLButton.setText("contact");<br /></li><li>mLButton.setOnClickListener(e -> contactObserver().subscribe(i -> log("contact:" + i)));<br /></li><li>mRButton.setText("conunt");<br /></li><li>mRButton.setOnClickListener(e -> conuntObserver().subscribe(i -> log("conunt:" + i)));</li></ol>
Copy after login
The running results are as follows
3. Reduce, Collect
The Reduce operator applies a function to receive the data emitted by the Observable and the calculation result of the function as the next calculation parameters and output the final result. It is very similar to the scan operator we learned earlier, except that scan will output the result of each calculation, while reduce will only output the final result.
The Collect operator is similar to Reduce, but its purpose is different. collect is used to collect the data emitted by the source Observable into a data structure. It requires two parameters:
1. A function that generates the collection data structure .
2. A function that receives the data structure generated by the first function and the data emitted by the source Observable as parameters.
Let’s use the reduce and collect operators. As in the original scan example, we create the source Observable using a list of 10 numbers 2.
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>private Observable<Integer> reduceObserver() {<br /></li><li>return Observable.from(list).reduce((x, y) -> x * y);<br /></li><li>}<br /></li><li>private Observable<ArrayList<Integer>> collectObserver() {<br /></li><li>return Observable.from(list).collect(() -> new ArrayList<>(), (integers, integer) -> integers.add(integer));<br /></li><li>}</li></ol>
Copy after login
Subscribe separately
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>mLButton.setText("reduce");<br /></li><li>mLButton.setOnClickListener(e -> reduceObserver().subscribe(i -> log("reduce:" + i)));<br /></li><li>mRButton.setText("collect");<br /></li><li>mRButton.setOnClickListener(e -> collectObserver().subscribe(i -> log("collect:" + i)));</li></ol>
Copy after login
The running results are as follows
Aggregation operation There are relatively few symbols, so that’s it. The source code in this article can be found at https://github.com/Chaoba/RxJavaDemo
http://www.bkjia.com/PHPjc/1077805.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1077805.htmlTechArticleRxJava Operator (8) Aggregate In this article, let’s take a look at Rxjava’s aggregation operator. 1. The Contact Contact operator combines multiple Observables into one Observable and emits...