最近参照文档对RxJava一系列操作符作了一下理解。
一、创建类操作符
1、Create
创建一个Observable,返回一个emitter(发射器),手动调用onNext(),onError(),onComplete()方法。
2、from Array,Just
创建一个将要发出的一个或一组对象的Observable,会自行调用onNext(),onComplete方法。Just里面其实是调用了formArray。
3、Interval
创建一个以一系列特定时间间隔隔开的整数的Observable。
4、range
创建一个从指定初始值(int)到指定个数(int)的连续事件的Observable。repeat,重复的意思。
5、timer
创建一个在给定延迟之后发出单个事件的Observable。使用场景可代替handler延迟特定时间后做某操作。
6、defer
建立订阅之后,为每个观察者创建一个新的Observable。有延迟之意,但每次都创建,往往与Create,Just等一起使用。
二、转换类操作符
1、buffer
将Observable中的项目收集起来并一起发出,而并非一次发一个项目。
这有两个概念,一是缓冲,二是跳过。由实验可看出我设置缓冲池为3,所以输出具just1、just2、just3还剩just4没输出;而我设置跳过2,所以第二次输出为just3和just4。当然还有long类型的时间类似。
2、flatMap
将Observable发出的项目转成Observables,然后再将这些项目的排放转成单个Observable。即一个任务开始,中间完成多个任务,最后输出一个任务。
上图flatMap示例:先调用注册接口完成注册操作,在flatMap中接收注册结果,例如取token;然后再调用登录接口完成登录操作;最后在onNext中接收登录结果,进入正常流程。
3、map
将Observable要发射的每一个项转换之后发出。
4、scan
将Observable发出的项的结果,按照定义的算法之后,连续发出。
分析上例:将第一项发出的结果发到scan中的s值,下一项为(s2),然后按我的s+s2算法,继续发第二项,以此类推,直到最后一项just3发完。
5、groupBy
将Observable划分为一组Observable,每个Observable从原始发出一组不同的项。
示例分析:将一组字符串的数字字符和其他字符分组。
三、过滤类操作符
1、debounce
如果特定时间跨度已经过去而没有发出另一个项目,则仅从Observable中发出项目。
示例分析:该示例情景为button防止连续点击,所以500毫秒的时间跨度内,第一次连续点击的10次,只会发出最后一次;后面间隔500毫秒以上再次做第二次连续点击的10次,也只会发出最后一次,总共只能接收2次,这样成功防止500毫秒内连续点击了。
2、distinct
过滤Observable发出的重复项。
3、elementAt
仅发出Observable的第index项。
4、filter
仅通过谓词测试的Observable中发出的那些项。
5、first
从Observable中仅发出第一项。
6、last
仅发出Observable中发出的最后一项。
7、skip抑制Observable发出的前N个项。
skipLast抑制Observable发出的最后N个项。
8、take仅发出Observable发出的前N个项。
takeLast仅发出Observable发出的最后N个项。
四、结合类操作符
1、combineLatest
当两个Observable之一发射一个项目时,通过指定函数指定逻辑处理合并每个Observable发射的最新项目,并根据此函数的结果发射项目。
示例分析:将Observable任务的数字100与另一个Observable任务的字符串just1合并组成到Combine对象的code与name上然后发射。
2、mergeWith
通过合并排放量将多个Observable合并成一个
3、zipWith
通过指定的函数将多个可观测对象的发射合并在一起,并根据此函数的结果为每个组合发射单个项目。
可应用与将多个接口请求的结果合并再统一发射给UI展示。
4、startWith
在开始从源中发射项目之前,发出指定的项目到序列之前。
RxJava官方参考文档