天天看点

Android RxJava之操作符

最近参照文档对RxJava一系列操作符作了一下理解。

一、创建类操作符

1、Create

创建一个Observable,返回一个emitter(发射器),手动调用onNext(),onError(),onComplete()方法。

Android RxJava之操作符

2、from Array,Just

创建一个将要发出的一个或一组对象的Observable,会自行调用onNext(),onComplete方法。Just里面其实是调用了formArray。

Android RxJava之操作符

3、Interval

创建一个以一系列特定时间间隔隔开的整数的Observable。

Android RxJava之操作符

4、range

创建一个从指定初始值(int)到指定个数(int)的连续事件的Observable。repeat,重复的意思。

Android RxJava之操作符

5、timer

创建一个在给定延迟之后发出单个事件的Observable。使用场景可代替handler延迟特定时间后做某操作。

Android RxJava之操作符

6、defer

建立订阅之后,为每个观察者创建一个新的Observable。有延迟之意,但每次都创建,往往与Create,Just等一起使用。

Android RxJava之操作符
Android RxJava之操作符

二、转换类操作符

1、buffer

将Observable中的项目收集起来并一起发出,而并非一次发一个项目。

Android RxJava之操作符
Android RxJava之操作符

这有两个概念,一是缓冲,二是跳过。由实验可看出我设置缓冲池为3,所以输出具just1、just2、just3还剩just4没输出;而我设置跳过2,所以第二次输出为just3和just4。当然还有long类型的时间类似。

2、flatMap

将Observable发出的项目转成Observables,然后再将这些项目的排放转成单个Observable。即一个任务开始,中间完成多个任务,最后输出一个任务。

Android RxJava之操作符
Android RxJava之操作符

上图flatMap示例:先调用注册接口完成注册操作,在flatMap中接收注册结果,例如取token;然后再调用登录接口完成登录操作;最后在onNext中接收登录结果,进入正常流程。

3、map

将Observable要发射的每一个项转换之后发出。

Android RxJava之操作符
Android RxJava之操作符

4、scan

将Observable发出的项的结果,按照定义的算法之后,连续发出。

Android RxJava之操作符
Android RxJava之操作符

分析上例:将第一项发出的结果发到scan中的s值,下一项为(s2),然后按我的s+s2算法,继续发第二项,以此类推,直到最后一项just3发完。

5、groupBy

将Observable划分为一组Observable,每个Observable从原始发出一组不同的项。

Android RxJava之操作符
Android RxJava之操作符

示例分析:将一组字符串的数字字符和其他字符分组。

三、过滤类操作符

1、debounce

如果特定时间跨度已经过去而没有发出另一个项目,则仅从Observable中发出项目。

Android RxJava之操作符
Android RxJava之操作符

示例分析:该示例情景为button防止连续点击,所以500毫秒的时间跨度内,第一次连续点击的10次,只会发出最后一次;后面间隔500毫秒以上再次做第二次连续点击的10次,也只会发出最后一次,总共只能接收2次,这样成功防止500毫秒内连续点击了。

2、distinct

过滤Observable发出的重复项。

Android RxJava之操作符
Android RxJava之操作符

3、elementAt

仅发出Observable的第index项。

4、filter

仅通过谓词测试的Observable中发出的那些项。

Android RxJava之操作符
Android RxJava之操作符

5、first

从Observable中仅发出第一项。

6、last

仅发出Observable中发出的最后一项。

7、skip抑制Observable发出的前N个项。

skipLast抑制Observable发出的最后N个项。

8、take仅发出Observable发出的前N个项。

takeLast仅发出Observable发出的最后N个项。

四、结合类操作符

1、combineLatest

当两个Observable之一发射一个项目时,通过指定函数指定逻辑处理合并每个Observable发射的最新项目,并根据此函数的结果发射项目。

Android RxJava之操作符

示例分析:将Observable任务的数字100与另一个Observable任务的字符串just1合并组成到Combine对象的code与name上然后发射。

2、mergeWith

通过合并排放量将多个Observable合并成一个

Android RxJava之操作符
Android RxJava之操作符

3、zipWith

通过指定的函数将多个可观测对象的发射合并在一起,并根据此函数的结果为每个组合发射单个项目。

Android RxJava之操作符

可应用与将多个接口请求的结果合并再统一发射给UI展示。

4、startWith

在开始从源中发射项目之前,发出指定的项目到序列之前。

Android RxJava之操作符
Android RxJava之操作符

RxJava官方参考文档