This article continues to describe the following types of operators
-Mathematical and Aggregate Operators (observable mathematical operations and aggregation operators)
First, Concat
The concat operator combines multiple observable into a observable and emits data, and the data is emitted in strict order, and the previous observable data is not emitted, and the data behind the observable is not emitted.
There are two operators similar to it, but there are differences, namely
1.startWith: Just insert a data in front of it.
2.merge: The data emitted is unordered.
Second, Count
The count operator is used to count the amount of data emitted by the source observable, and finally the number is emitted, and if the source observable emits an error, the error is reported directly, and count does not emit statistics until the source observable is terminated.
The following uses the Concat and count operators to combine multiple observable and statistics on the number of transmit data
PrivateObservable<Integer>Concatobserver () {Observable<Integer>Obser1=Observable.Just1,2,3); Observable<Integer>Obser2=Observable.Just4,5,6); Observable<Integer>Obser3=Observable.Just7,8,9);returnObservable.Concat (Obser1, Obser2, Obser3); }PrivateObservable<Integer>Conuntobserver () {returnObservable.Just1,2,3).Count (); }
To subscribe separately
mLButton.setText("concat");mLButton.setOnClickListener(e -> concatObserver().subscribe(i -> log("concat:" + i)));mRButton.setText("conunt");mRButton.setOnClickListener(e -> conuntObserver().subscribe(i -> log("conunt:" + i)));
The operation results are as follows
Three, Reduce, Collect
The reduce operator uses a function to receive the computed results of the observable emitted data and functions as the next calculated parameter, outputting the final result. Similar to the scan operators we've seen before, only scan outputs the results of each calculation, and reduce only outputs the final result.
The Collect operator is similar to reduce, but for different purposes, the collect is used to collect the data emitted by the source observable into a single data structure, which requires two parameters:
1. A function that generates a collection of data structures.
2. A function that receives the data structure generated by the first function and the data emitted by the source observable as a parameter.
Let's use the reduce and collect operators. As with the original scan example, we created the source observable using a list of 10 numbers 2.
private observable<integer> reduceObserver () {
return observable.from
(list ). reduce ((x, y) x * y) ; } private observable < arraylist <integer >> collectobserver () {return observable< /span>. from . collect (() new arraylist<> (), (integers, integer)- > Integers.add (integer)) ; }
To subscribe separately
mLButton.setText("reduce");mLButton.setOnClickListener(e -> reduceObserver().subscribe(i -> log("reduce:" + i)));mRButton.setText("collect");mRButton.setOnClickListener(e -> collectObserver().subscribe(i -> log("collect:" + i)));
The operation results are as follows
The aggregation operator is relatively small, it is here, the source code in this article see Https://github.com/Chaoba/RxJavaDemo
Android Rxjava Usage Introduction (v) Rxjava operator