ReactiveX系列
ReactiveX 是http://reactivex.io提供的响应式框架,采用观察者模式+链式api构成,目前支持语言如下:
ReactiveX系列翻译,仅翻译通用篇,共计5篇内容:
- Observable
- Operators
- Single
- Subject
- Scheduler
只有理解了这五大内容,学习起来才会有目标和场景。以后不管你去使用RxJava,还是RxSwift,中心思想不会跳出这些内容。
本文是第二篇:操作符
简述了常用的操作符的作用
正文
在ReactiveX的不同语言实现中,都会提供一系列操作符。尽管大部分操作符,每种语言都实现了,但是还是有少部分是某种语言特有的。因此。每种语言在操作符命名上都是根据语言本身类似的操作符名称。
- 链式操作符:大多数运算符都在Observable上运行并返回一个Observable。这样使得你可以采用链式调用把这些操作符穿起来。在一个链中,链中的每个运算符都会修改由前一个运算符的运算产生的Observable。当然,还有其他模式,比如Builder模式,在Builder模式中,链的操作符顺序就没有那么重要了。
- ReactiveX操作符:本文将为你列举ReactiveX中的核心操作符以及他们的详细介绍链接。并且提供一个决策树,帮你在实际中选择使用那些操作符。最后,在ReactiveX的许多特定于语言的实现中,有一个按字母顺序排列的大多数运算符列表。
- 一、新建Observable:
发起新Observables的运营商。
- Create:创建一个新的Observable
- Defer:在观察者订阅之前不要创建Observable,并为每个观察者创建一个新的Observable
- Empty/Never/Throw :创建具有非常精确和有限行为的Observable
- From:将一些其他对象或数据结构转换为Observable
- Interval:创建一个Observable,它发出一个由特定时间间隔隔开的整数序列
- Just:将对象或一组对象转换为发出该对象或那些对象的Observable
- Range:创建一个发出一系列连续整数的Observable
- Repeat:创建一个Observable,重复发出特定项目或项目序列
- Start:创建一个发出函数返回值的Observable
- Timer:创建一个在给定延迟后发出单个项目的Observable
- 二、转换Observable:
转换Observable发出的项的运算符。
- Buffer:定期将Observable中的项目收集到捆绑包中并发出这些捆绑包,而不是一次发送一个项目
- FlatMap:将Observable发出的项目转换为Observables,然后将这些项目的排放量变为单个Observable
- GroupBy:将Observable划分为一组Observable,每个Observable从原始Observable发出不同的项目组,按键组织
- Map:通过将函数应用于每个项目来转换Observable发出的项目
- Scan:将函数应用于Observable发出的每个项目,按顺序,并发出每个连续的值
- Window:定期将Observable中的项目细分为Observable窗口并发出这些窗口,而不是一次发出一个项目
- 三、过滤Observable:
有选择地从源Observable中发出项的运算符。
- Debounce:如果特定的时间跨度已经过去而没有发出另一个项目,则只从Observable中发出一个项目
- Distinct:抑制Observable发出的重复项
- ElementAt:仅发出Observable发出的项目n
- Filter:仅发出通过特定条件的Observable中的那些项
- First:从Observable中仅发出第一个项目或满足条件的第一个项目
- IgnoreElements:不从Observable中发出任何项目,但镜像其终止通知
- Last:仅发出Observable发出的最后一项
- Sample:在周期性时间间隔内发出Observable发出的最新项目
- Skip:抑制Observable发出的前n个项目
- SkipLast:抑制Observable发出的最后n个项目
- Take: 仅发出Observable发出的前n个项目
- TakeLast:仅发出Observable发出的最后n个项目
- 四、合并Observable:
使用多个源Observable创建单个Observable的运算符
- And/Then/When:通过模式和计划中介组合两个或多个Observable发出的项目集
- CombineLatest:当一个项目由两个Observable中的任何一个发出时,通过指定的函数组合每个Observable发出的最新项目,并根据此函数的结果发出项目
- Join:在根据另一个Observable发出的项目定义的时间窗口期间发出一个Observable中的项目时,组合两个Observable发出的项目
- Merge:通过合并它们的排放,将多个Observable组合成一个
- StartWith:在开始从源Observable中发出项之前,发出指定的项序列
- Switch:将发出Observables的Observable转换为单个Observable,该Observable发出最近发出的Observables发出的项目
- Zip:通过指定的功能将多个Observable的排放组合在一起,并根据此功能的结果为每个组合发出单个项目
- 五、错误处理:
有助于从Observable中恢复错误通知的操作员
- Catch:通过继续序列而不出错来从onError通知中恢复
- Retry:如果源Observable发送onError通知,则重新订阅它,希望它能完成而不会出错
- 六、常用工具:
用于处理Observable的有用运算符的工具箱
- Delay:将Observable的排放量及时转移一定量
- Do:注册一个动作来承担各种Observable生命周期事件
- Materialize/Dematerialize:表示发出的项目和作为发出项目发送的通知,或者反转此过程
- ObserveOn:指定观察者将观察此Observable的调度程序
- Serialize:强制Observable进行序列化调用并保持良好状态
- Subscribe:对观察者的排放和通知进行操作
- SubscribeOn: 指定Observable在订阅时应使用的调度程序
- TimeInterval:将发射物品的Observable转换为发出这些发射之间经过的时间量的指示的Observable
- Timeout:镜像源Observable,但是如果在没有任何发出的项目的情况下经过了特定的时间段,则发出错误通知
- Timestamp:将时间戳附加到Observable发出的每个项目
- Using:创建一个与Observable具有相同生命周期的可支配资源
- 七、条件Observable:
评估Observables发出的一个或多个Observable或项目的运算符
- All:确定Observable发出的所有项目是否符合某些标准
- Amb:给定两个或多个源Observable,仅从第一个Observable中发出所有项目以发出项目
- Contains:确定Observable是否发出特定项目
- DefaultIfEmpty:从源Observable发出项目,如果源Observable不发出任何内容,则发出默认项目
- SequenceEqual:确定两个Observable是否发出相同的项目序列
- SkipUntil:丢弃Observable发出的项目,直到第二个Observable发出项目为止
- SkipWhile:丢弃Observable发出的项目,直到指定的条件变为false
- TakeUntil:在第二个Observable发出项目或终止后,丢弃Observable发出的项目
- TakeWhile:在指定条件变为false后丢弃Observable发出的项目
- 八、数学运算:
操作Observable发出的整个项目序列的运算符
- Average: 计算Observable发出的数字的平均值并发出此平均值
- Concat:从两个或多个Observable发射发射而不交错
- Count:计算源Observable发出的项目数,并仅发出此值
- Max:确定并发出Observable发出的最大值项
- Min:确定并发出Observable发出的最小值项
- Reduce:按顺序将一个函数应用于Observable发出的每个项目,并发出最终值
- Sum:计算Observable发出的数字之和并发出此总和
- 九、背压:
处理Observables的策略比观察者消耗它们更快
- 十、连接:
具有更精确控制的订阅动态的特殊观察者
- Connect:指示可连接的Observable开始向其订户发送项目
- Publish:将普通的Observable转换为可连接的Observable
- RefCount:使Connectable Observable的行为类似于普通的Observable
- Replay:确保所有观察者都看到相同的发射物品序列,即使他们在Observable开始发射物品后订阅
- 十一、转化:
- To:将Observable转换为另一个对象或数据结构
此树可以帮助您找到您正在寻找的ReactiveX Observable运算符
(由于排版问题,暂时不发布)
总结
操作符是整个ReactiveX系列最常用的功能,通过这一篇文章可以解决你大部分问题。篇幅过长,适合收藏。在你忘记怎么使用的时候,可以翻翻,也许就找到思路了。
閱讀更多 全職碼農 的文章