Rxjava计算操作符

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值