一、averageInteger
计算Observable的发射数字的平均值。Average
操作符操作符一个发射数字的Observable,并发射单个值:原始Observable发射的数字序列的平均值。这个操作符不包含在RxJava核心模块中,它属于不同的rxjava-math
模块。它被实现为四个操作符:averageDouble
, averageFloat
, averageInteger
, averageLong
。
//使用MathObservable需要在build.gradle中添加compile 'io.reactivex:rxjava-math:1.0.0'
Observable<Integer> averageObservable =
MathObservable.averageInteger(Observable.just(11, 2, 3, 4, 5));
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onNext(Integer v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
averageObservable.subscribe(subscriber);
运行结果:
二、min
求发射的Observable中的最小值
//使用MathObservable需要在build.gradle中添加compile 'io.reactivex:rxjava-math:1.0.0'
Observable<Integer> averageObservable =
MathObservable.min(Observable.just(11, 2, 3, 4, 5));
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onNext(Integer v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
averageObservable.subscribe(subscriber);
运行结果:
三、max
发射的observable中的最大值
//使用MathObservable需要在build.gradle中添加compile 'io.reactivex:rxjava-math:1.0.0'
Observable<Integer> averageObservable =
MathObservable.max(Observable.just(11, 2, 3, 4, 5));
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onNext(Integer v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
averageObservable.subscribe(subscriber);
运行结果:
四、count
计算Observable所发射的数据的数量
Observable<Integer> averageObservable = Observable.just(11, 2, 3, 4, 5).count();
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onNext(Integer v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
averageObservable.subscribe(subscriber);
运算结果:
五、sum
Observable所发射的数据的和.Sum
操作符操作一个发射数值的Observable,仅发射单个值:原始Observable所有数值的和。
RxJava的实现是sumDouble
, sumFloat
, sumInteger
, sumLong
,它们不是RxJava核心模块的一部分,属于rxjava-math
模块。
//使用MathObservable需要在build.gradle中添加compile 'io.reactivex:rxjava-math:1.0.0'
Observable<Integer> averageObservable = MathObservable.sumInteger(Observable.just(11, 2, 3, 4, 5));
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onNext(Integer v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
averageObservable.subscribe(subscriber);
运行结果:
六、contact
不交错的发射两个或多个Observable的发射物。Concat
操作符连接多个Observable的输出,就好像它们是一个Observable,第一个Observable发射的所有数据在第二个Observable发射的任何数据前面,以此类推。直到前面一个Observable终止,Concat
才会订阅额外的一个Observable。注意:因此,如果你尝试连接一个"热"Observable(这种Observable在创建后立即开始发射数据,即使没有订阅者),Concat
将不会看到也不会发射它之前发射的任何数据。在ReactiveX的某些实现中有一种ConcatMap
操作符(名字可能叫concat_all
, concat_map
,concatMapObserver
, for
, forIn/for_in
, mapcat
, selectConcat
或selectConcatObserver
),他会变换原始Observable发射的数据到一个对应的Observable,然后再按观察和变换的顺序进行连接操作。StartWith
操作符类似于Concat
,但是它是插入到前面,而不是追加那些Observable的数据到原始Observable发射的数据序列。Merge
操作符也差不多,它结合两个或多个Observable的发射物,但是数据可能交错,而Concat
不会让多个Observable的发射物交错。
Observable<Integer> observable = Observable.concat(Observable.just(1,2,3,4,5),Observable.just(6,7,8,9,10));
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onNext(Integer v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable.subscribe(subscriber);
运行结果:
七、reduce
按顺序对Observable发射的每项数据应用一个函数并发射最终的值。Reduce
操作符对原始Observable发射数据的第一项应用一个函数,然后再将这个函数的返回值与第二项数据一起传递给函数,以此类推,持续这个过程知道原始Observable发射它的最后一项数据并终止,此时Reduce
返回的Observable发射这个函数返回的最终值。在其它场景中,这种操作有时被称为累积
,聚集
,压缩
,折叠
,注射
等。
reduce
收集发射的数据到一个可变的数据结构,那种场景你应该使用collect
。
Observable<Integer> observable = Observable.just(1,2,3,4,5);
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onNext(Integer v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.reduce(new Func2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer integer1, Integer integer2) {
Log.e(TAG, "integer1:"+integer1+"..............integer2:"+integer2);
return integer1+integer2;
}
})
.subscribe(subscriber);
运行结果:
八、collect
将Observable的数据收集到一个数据结构中。collect
与reduce
类似,但它的目的是收集原始Observable发射的所有数据到一个可变的数据结构,collect
生成的这个Observable会发射这项数据。它需要两个参数:
- 一个函数返回可变数据结构
- 另一个函数,当传递给它这个数据结构和原始Observable发射的数据项时,适当地修改数据结构。
Observable<Integer> observable = Observable.just(1,2,3,4,5);
Func0<ArrayList<Integer>> stateFactory = new Func0<ArrayList<Integer>>() {
@Override
public ArrayList<Integer> call() {
return new ArrayList<Integer>();
}
};
Action2<ArrayList<Integer>, Integer> collector = new Action2<ArrayList<Integer>, Integer>() {
@Override
public void call(ArrayList<Integer> integers, Integer integer) {
Log.e(TAG,"integer:"+integer+"..................");
integers.add(integer);
}
} ;
Subscriber<ArrayList<Integer>> subscriber = new Subscriber<ArrayList<Integer>>() {
@Override
public void onNext(ArrayList<Integer> v) {
Log.e(TAG, "onNext................." + v.toString());
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.collect(stateFactory,collector)
.subscribe(subscriber);
运行结果:
九、toList
收集原始Observable发射的所有数据到一个列表,然后返回这个列表
十、toSortedList
收集原始Observable发射的所有数据到一个有序列表,然后返回这个列表
十一、toMap
将序列数据转换为一个Map,Map的key是根据一个函数计算的
十二、toMultiMap
将序列数据转换为一个列表,同时也是一个Map,Map的key是根据一个函数计算的