Rxjava中的算术运算符
说明:Rxjava中的算术运算并不是Rxjava的核心模块,而是在rxjava-math模块中,到目前为止rxjava-math只有一个版本。不经意看到了这个运算符,发现网上关于怎么使用的资料几乎没有,所以强迫症犯了,研究了一下做个记录。
算术运算符都包括什么
. averageInteger( )— 求序列平均数并发射
. averageLong( ) — 求序列平均数并发射
. averageFloat( ) — 求序列平均数并发射
. averageDouble( ) — 求序列平均数并发射
. max( ) — 求序列最大值并发射
. maxBy( ) — 求最大key对应的值并发射
. min( ) — 求最小值并发射
. minBy( ) — 求最小Key对应的值并发射
. sumInteger( ) — 求和并发射
. sumLong( ) — 求和并发射
. sumFloat( ) — 求和并发射
. sumDouble( ) — 求和并发射
如何使用
在gradle文件中添加依赖:compile ‘io.reactivex:rxjava-math:1.0.0’
顺便说一下:rxjava-math可以不依赖Rxjava库,可以拿出来单独使用哟
代码怎么写(先来上一段)
Integer[] datas = new Integer[]{99,32,68,50,23,72,88,20} ;
Observable<Integer> mObservable = Observable.from(datas) ;
OperatorMinMax.min(mObservable)
//*订阅在计算线程执行*
.subscribeOn(Schedulers.computation())
//*观察者在主线程(UI)线程执行*
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Toast.makeText(MainActivity.this, "最小值:"+integer, Toast.LENGTH_SHORT).show();
}
}) ;
上面这段代码非常简单,就是求出传入数组的最小值,可以省去我们for while
的功夫,并且可以指定执行线程。
小笔记:
OperatorMinMax.xxx()- - - - -min、max
OperatorSum.xxx()- - - - -求和相关操作
注意:
求平均值用法稍微复杂一点,需要用OperatorAverageDoublede的call方法创建一个观察者Subscriber(既可作为观察者,也可作为被观察者),然后用一个带有数据源的观察者Observable订阅,即可计算平均值
打破抽象的,就是代码
OperatorAverageDouble<Integer> ave = new
OperatorAverageDouble<>(new Func1<Integer, Double>() {
@Override
public Double call(Integer integer) {
return integer*1d;
}
}) ;
Observable.just(1,2,3,4,5,6,7,8,9,10)
.subscribe(ave.call(new Subscriber<Double>() {
@Override
public void onCompleted() {
Log.i("Completed","计算完成") ;
}
@Override
public void onError(Throwable e) {
Log.e("Error","计算错误") ;
}
@Override
public void onNext(Double aDouble) {
Log.i("onNext","平局值为:"+aDouble) ;
}
})) ;
感觉还不如我们的for循环呢,对于上面一段代码,不做评价,如果加上线程切换,还是比较有用的。这个就要看是否用的顺手。
结束语
对于Rxjava,目前正在学习中,也对 Rxjava1.x.x和Rxjava2.x.x*,做了一些对比和总结,后续整理好发到个人博客做记录,也是在此督促一下自己。
最后放上一Rxjava1.x.x的文档翻译链接(十分感谢作者团队的翻译和贡献),对于学习Rxjava很有帮助,尤其是一些操作符(操作符对于Rxjava2.x.x基本都适用):
https://www.gitbook.com/book/mcxiaoke/rxdocs/details