Android RxJava使用介绍(五) RxJava的操作符

本篇文章继续介绍以下类型的操作符

- Mathematical and Aggregate Operators(Observable数学运算及聚合操作符)

一、Concat

Concat操作符将多个Observable结合成一个Observable并发射数据,并且严格按照先后顺序发射数据,前一个Observable的数据没有发射完,是不能发射后面Observable的数据的。

有两个操作符跟它类似,但是有区别,分别是

1.startWith:仅仅是在前面插上一个数据。

2.merge:其发射的数据是无序的。

二、Count

Count操作符用来统计源Observable发射了多少个数据,最后将数目给发射出来;如果源Observable发射错误,则会将错误直接报出来;在源Observable没有终止前,count是不会发射统计数据的。

下面使用Concat和Count操作符来结合多个Observable和统计发射数据的数目

private Observable<Integer> concatObserver() {
        Observable<Integer> obser1 = Observable.just(1, 2, 3);
        Observable<Integer> obser2 = Observable.just(4, 5, 6);
        Observable<Integer> obser3 = Observable.just(7, 8, 9);
        return Observable.concat(obser1, obser2, obser3);
    }
    private Observable<Integer> conuntObserver() {
        return Observable.just(1, 2, 3).count();
    }

分别进行订阅

mLButton.setText("concat");
mLButton.setOnClickListener(e -> concatObserver().subscribe(i -> log("concat:" + i)));
mRButton.setText("conunt");
mRButton.setOnClickListener(e -> conuntObserver().subscribe(i -> log("conunt:" + i)));

运行结果如下

三、Reduce、Collect

Reduce操作符应用一个函数接收Observable发射的数据和函数的计算结果作为下次计算的参数,输出最后的结果。跟前面我们了解过的scan操作符很类似,只是scan会输出每次计算的结果,而reduce只会输出最后的结果。

Collect操作符类似于Reduce,但是其目的不同,collect用来将源Observable发射的数据给收集到一个数据结构里面,需要使用两个参数:

1.一个产生收集数据结构的函数。

2.一个接收第一个函数产生的数据结构和源Observable发射的数据作为参数的函数。

下面我们来使用一下reduce和collect操作符。同当初scan的例子一样,我们使用一个装了10个数字2的list创建源Observable。

private Observable<Integer> reduceObserver() {
        return Observable.from(list).reduce((x, y) -> x * y);
    }
    private Observable<ArrayList<Integer>> collectObserver() {
         return Observable.from(list).collect(() -> new ArrayList<>(), (integers, integer) -> integers.add(integer));
    }

分别进行订阅

mLButton.setText("reduce");
mLButton.setOnClickListener(e -> reduceObserver().subscribe(i -> log("reduce:" + i)));
mRButton.setText("collect");
mRButton.setOnClickListener(e -> collectObserver().subscribe(i -> log("collect:" + i)));

运行结果如下

聚合操作符比较少,就到这里了,本文中的源代码见https://github.com/Chaoba/RxJavaDemo

时间: 2024-08-02 03:36:03

Android RxJava使用介绍(五) RxJava的操作符的相关文章

Android RxJava使用介绍(三) RxJava的操作符

上一篇文章已经具体解说了RxJava的创建型操作符.本片文章将继续解说RxJava操作符.包括: Transforming Observables(Observable的转换操作符) Filtering Observables(Observable的过滤操作符) Transforming Observables(Observable的转换操作符) buffer操作符 buffer操作符周期性地收集源Observable产生的结果到列表中.并把这个列表提交给订阅者,订阅者处理后,清空buffer列

Android RxJava使用介绍(二) RxJava的操作符

上一篇文章我们通过一个简单的例子来给大家展示了RxJava的基本用法,相信大家已经对RxJava有了大概的了解,由于上篇文章对RxJava的使用介绍都是点到为止,并没有进行深入展开,也许你对RxJava有种名不副实的感觉.OK,下面我们就进入正题,一步步的揭开RxJava的神秘面纱! 一个例子 RxJava的强大之处,在于它提供了非常丰富且功能强悍的操作符,通过使用和组合这些操作符,你几乎能完成所有你想要完成的任务,举个例子如下: 现在有一个需求:app启动时显示一张图片(一般是app的logo

Android RxJava使用介绍(四) RxJava的操作符

本篇文章继续介绍以下类型的操作符 Combining Observables(Observable的组合操作符) Error Handling Operators(Observable的错误处理操作符) Combining Observables(Observable的组合操作符) combineLatest操作符 combineLatest操作符把两个Observable产生的结果进行合并,合并的结果组成一个新的Observable.这两个Observable中任意一个Observable产生

Android RxJava使用介绍(一)概念

RxJava到底是什么?使用RxJava到底有什么好处呢?其实RxJava是ReactiveX中使用Java语言实现的版本,目前ReactiveX已经实现的语言版本有: Java: RxJava JavaScript: RxJS C#: Rx.NET C#(Unity): UniRx Scala: RxScala Clojure: RxClojure C++: RxCpp Ruby: Rx.rb Python: RxPY Groovy: RxGroovy JRuby:RxJRuby Kotlin

Android RxJava使用介绍(一) Hello World

最近在做东西的时候,一直在使用RxJava框架,越是深入了解RxJava,就越觉得这个框架威力实在是太大了.好东西不能一个人独自享受,后面几篇文章我会由浅入深来介绍一下RxJava的使用方法,相信看完之后,你会跟我一样逐渐喜欢上这个"威力无比"的武器!那么,RxJava到底是什么?使用RxJava到底有什么好处呢?其实RxJava是ReactiveX中使用Java语言实现的版本,目前Reactive... http://bar.cnyes.com/html/100102-1/8D260

Rxjava的介绍与使用

最近RxJava越来越流行了,在移动端也越来越多的项目开始使用这个框架了!唯一的问题就是上手不容易,尤其是大部分人之前都是使用命令式编程语言.但是一旦你弄明白了,你就会发现RxJava真是太棒了. 这里仅仅是帮助你了解RxJava,整个系列共有四篇文章,希望你看完这四篇文章之后能够了解RxJava背后的思想,并且喜欢上RxJava. 基础 RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者).Observables发出一系列事件,Subscr

RxJava系列之二 变换类操作符具体解释1

1.回想 上一篇文章我们主要介绍了RxJava , RxJava 的Observables和 RxJava的just操作符.以及RxJava一些经常使用的操作. 没看过的抓紧点我去看吧. 事实上RxJava有非常多的操作符, 而我们学过的just仅仅是创建类操作符的当中一种. 以后我会陆续介绍其它的创建类操作符. 文章代码地址:https://github.com/jiang111/RxJavaDemo 2. 变换类操作符之map 開始本篇文章的解说: map操作符的详细使用方法. map是属于

【ALearning】第五章 Android相关组件介绍(一)Activity

Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起.在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android应用程序的基石. Activities(活动) Service(服务) Content Provider(内容提供者) Intent(意图) Broadcast Receiver(广播接收器) Notification(通知) 在这里我们提到了组件(Component)的概念,组件(Component)是对数据和方法

RxJava系列之一 初识Rxjava

1.简介 基础知识 响应式代码的基本组成部分是Observables和Subscribers(事实上Observer才是最小的构建块,但实践中使用最多的是Subscriber,因为Subscriber才是和Observables的对应的.). Observable发送消息,而Subscriber则用于消费消息.消息的发送是有固定模式的.Observable可以发送任意数量的消息(包括空消息), 当消息被成功处理或者出错时,流程结束.Observable会调用它的每个Subscriber的Subs