介绍

ReactiveX的每个语言特定的实现都提供了一些操作符。 其中一些是共同提供的,但也有一些操作符仅在某些语言实现中提供。此外,每个语言实现都倾向于将其操作符命名为类似于该语言中其他上下文已熟悉的命名约定。

链接操作符

大多数操作符都在事件源上操作并返回一个事件源。这使我们可以在链中一个接一个地应用这些操作符。链中的每个操作符都会处理由前一个操作符的操作产生的事件源。

区别其他模式,如Builder模式,该模式使用特定类的各种方法通过方法的操作修改该对象,对同一类的项进行操作。这些模式允许以类似的方式链接方法。但是在Builder模式中,方法在链中出现的顺序通常并不重要,事件源的操作符顺序很重要

一条链上的操作符不是单独的在原始的事件源上操作的,是依次在调用链被调用,每个操作符操作的事件源都由前一个操作符生成。

ReactiveX的操作符

此页面首先列出了ReactiveX中被视为“核心”操作符的内容,以及指向更深入信息页面的链接,这些页面有关于这些操作符如何工作以及特定语言特定ReactiveX版本如何实现这些操作符。

接下来是一个“决策树”,可以帮助找到最适合的用例的操作符。

最后,有一个按字母排列的大多数语言特定的实现中常见的ReactiveX操作符列表。这些链接指向对应核心操作符的页面,该核心操作符指最类似于特定于语言的操作符(例如,Rx.NET“SelectMany”操作符链接到FlatMapReactiveX操作符的文档,其中“SelectMany”是Rx.NET实现)。

如果要实现自己的操作符,请参阅实现操作符.

内容

  1. 操作符分类
  2. 操作符决策树
  3. 按字母排序的操作符列表

操作符分类

创建事件源

创建新事件源的操作符。

  • Create — 通过调用观察者的方法从无到有创建一个事件源
  • Defer — 在观察者订阅之前不会创建事件源,并为每个观察者创建一个新的事件源
  • Empty/Never/Throw — 创建具有非常明确和有限行为的事件源
  • From — 将一些其他对象或数据结构转换为事件源
  • Interval — 创建一个事件源,它以给定的时间间隔发出一系列整数
  • Just — 将对象或一组对象转换为发出该对象或那些对象的事件源
  • Range — 创建一个事件源,它发出一系列连续的整数
  • Repeat — 创建一个事件源,重复发出特定事件或事件序列
  • Start — 创建一个发出函数返回值的事件源
  • Timer — 创建一个事件源,在给定的延迟后发出单个事件

转换事件源

转换事件源发出的事件的操作符。

  • Buffer — 周期性的将事件源发出的事件收集成捆并发出这些捆绑事件,而不是一次发送一个事件
  • FlatMap — 将事件源发出的事件转换为多个事件源,然后将这事件的依次发出
  • GroupBy — 将一个事件源根据不同的事件按key划分为一组事件源
  • Map — 每个事件源发出的事件通过将函数处理后在发出
  • Scan — 依次的用聚合函数处理事件源发出的事件, 并发出每个连续的值
  • Window — 将事件源中的事件周期性划分为事件源窗口并发出这些窗口,而不是一次发出一个事件

过滤事件源

从源事件源有选择地发出事件的操作符。

  • Debounce — 如果特定的时间跨度已经过去而没有发出另一个事件则从事件源发出一个事件
  • Distinct — 对事件源发出的事件去重
  • ElementAt — 仅从事件源发出位置n的事件
  • Filter — 仅发出通过断言正确的事件源中的那些事件
  • First — 从事件源中仅发出第一个事件或满足条件的第一个事件
  • IgnoreElements — 不从事件源中发出任何事件,但要反馈其终止通知
  • Last — 仅发出事件源发出的最后一哥事件
  • Sample — 在固定的时间间隔采样事件源最靠近的事件发出
  • Skip — 跳过事件源发出的前n个事件
  • SkipLast — 跳过事件源发出的最后n个事件
  • Take — 仅从事件源发出的前n个事件
  • TakeLast — 仅从事件源发出的最后n个事件

合并事件源

通过合并多个源事件源创建一个事件源的操作符。

  • And/Then/When — 使用PatternPlan中介组合两个或多个事件源发出的事件
  • CombineLatest — 当两个事件源中的任何一个发出一个事件时,通过指定的函数组合每个事件源发出的最新事件并发出
  • Join — 在另一个事件源发出的事件定义的时间窗口期间发出一个事件源中的事件,组合两个事件源发出的事件
  • Merge — 合并发送的事件来合并多个事件源为一个
  • StartWith — 在开始从源事件源发出事件之前,先发出指定的事件序列
  • Switch — 将发出多个事件源转换为单个事件源,该事件源发出多个事件源中最近发出的事件
  • Zip — 通过指定的函数将多个事件源的发出的事件排放组合在一起并发出

错误处理操作符

有助于捕获事件源的错误通知的操作符。

  • Catch — 捕获onError通知,已无错误继续发送之后的序列
  • Retry — 如果源事件源发出onError通知, 则重新订阅它,希望它能完成而不会出错

公共操作符

用于处理事件源的有用操作符的集合。

  • Delay — 事件源延迟指定时间发出事件
  • Do — 注册要对事件源生命周期中发生的各种事件执行的操作
  • Materialize/Dematerialize — 发出表达事件源发出的事件(通知)类型,和逆操作
  • ObserveOn — 指定观察者将观察此事件源的调度程序
  • Serialize — 强制事件源进行序列化调用并保持良好行为和同步
  • Subscribe — 根据事件源的发出的事件或通知进行操作
  • SubscribeOn — 指定事件源在订阅时应使用的调度器
  • TimeInterval — 将发出事件的事件源转换为发出这些事件之间的时间间隔
  • Timeout — 镜像源事件源,但如果在指定时间段内没有任何发出的事件,则发出错误通知
  • Timestamp — 为事件源发出的每个事件附加时间戳
  • Using — 创建与事件源具有相同生命周期的可支配资源

条件操作符

评估事件源发出的一个或多个事件源或事件的操作符。

  • All — 确定事件源发出的所有事件是否符合某些条件
  • Amb — 给定两个或多个源事件源,仅从第一个发出事件或通知的事件源中发出所有事件
  • Contains — 确定事件源是否发出指定项目
  • DefaultIfEmpty — 如果源事件源不发出任何内容,则发出默认事件
  • SequenceEqual — 确定两个事件源是否发出相同的事件序列
  • SkipUntil — 丢弃事件源发出的事件,直到第二个事件源发出事件为止
  • SkipWhile — 丢弃事件源发出的事件,直到指定的条件变为false
  • TakeUntil — 在第二个事件源发出事件或终止后,丢弃事件源发出的事件
  • TakeWhile — 在指定条件变为false后丢弃事件源发出的事件

算术操作符

对事件源发出的整个事件序列进行算术运算的操作符

  • Average — 计算事件源发出的数字的平均值并发出此数值
  • Concat — 无交叉的拼接两个或多个事件源发出的事件
  • Count — 计算源事件源发出的事件数并发出此数值
  • Max — 计算事件源发出的数字的最大值并发出此数值
  • Min — 计算事件源发出的数字的最小值并发出此数值
  • Reduce — 相继的用函数处理事件源发出的事件, 并发出最终的值
  • Sum — 计算事件源发出的数字的和并发出此数值

背压(backpressure) 操作符

连接操作符

精确控制的订阅动态的特殊事件源。

  • Connect — 指示可连接的事件源开始向其观察者发出事件
  • Publish — 将普通的事件源转换为可连接的事件源
  • RefCount — 使可连接事件源的行为类似于普通的事件源
  • Replay — 确保所有观察者都看到相同的事件序列,即使他们在事件源开始发出事件后订阅

转换操作符

  • To — 将事件源转换为另一种对象或数据结构

操作符决策树

此树可以帮助找到所需的ReactiveX事件源操作符。

想创建一个新的事件源
发出指定事件
Just
事件是订阅调用后从方法返回
Start
事件是订阅调用后从ActionCallableRunnable或一些有序对象返回
From
在指定延迟后
Timer
ArrayIterable或类似的地方拉取要发出的事件
From
从一个可能还没有完成的异步任务获取它
Start
从一个可能还没有完成的异步任务获取序列
From
重复发出特定事件或事件序列
Repeat
从无到有使用自定义逻辑
Create
为每个要订阅的观察者
Defer
发出一系列连续的整数
Range
以指定时间间隔
Interval
在指定延迟后
Timer
直接完成而不发出事件
Empty
什么都不做
Never
想通过组合其他事件源来创建一个事件源
并按照收到的顺序从所有事件源中发出所有事件
Merge
从所有的事件源中发出所有事件,一次一个事件源
Concat
通过顺序组合来自两个或多个事件源的事件来发出的新事件
每个事件源发出新的事件
Zip
任何一个事件源发出新的事件
CombineLatest
在另一个事件源发出的事件定义的时间窗口期间发出一个事件源中的事件
Join
使用PatternPlan中介组合
And/Then/When
发出多个事件源中最近发出的事件
Switch
想转换事件源发出的事件
一个一个使用函数处理
Map
转换为事件对应的事件源
FlatMap
按顺序一次一个事件源
ConcatMap
基于之前所以的事件
Scan
附加上时间戳
Timestamp
转换为发出这些事件之间的时间间隔
TimeInterval
想延迟指定时间发出事件
Delay
想将事件源发出的事件通知转换为事件并重新发出
把其包裹在通知对象中
Materialize
当要重新解包恢复时
Dematerialize
想忽略事件源发出的所有事件,只发出完成或错误通知
IgnoreElements
想镜像并在之前添加指定事件序列
StartWith
仅当它的事件序列为空时
DefaultIfEmpty
想将事件源发出的事件收集成捆并发出这些捆绑事件
Buffer
仅包含最后发出的事件
TakeLastBuffer
想将一个事件源拆分成多个事件源
Window
把相似的事件放在同事件源里
GroupBy
想获取事件源发出的特定事件
完成前的最后一个事件
Last
发出的唯一事件
Single
发出的第一个事件
First
想有选择的发出某些事件
过滤掉不匹配的事件
Filter
只有第一个事件
First
只有前n个事件</em>
Take
只有最后一个事件
Last
只有位置n的事件
ElementAt
过滤前面的事件
跳过n个事件
Skip
跳过直到匹配的事件
SkipWhile
跳过最初的几次
Skip
跳过直到第二个事件源发出事件
SkipUntil
过滤后面的事件
跳过最后n个事件
SkipLast
发出直到不匹配的事件
TakeWhile
跳过最后的几次
SkipLast
发出直到第二个事件源发出事件
TakeUntil
定期对事件源抽样
Sample
特定的时间跨度已经过去而没有发出另一个事件则发出事件
Debounce
对事件源发出的事件去重
Distinct
如果紧跟的事件相同才认为是重复的
DistinctUntilChanged
在开始发出事件后的一段时间内延迟订阅
DelaySubscription
想只发出第一个发出事件的事件源的事件
Amb
想评估事件源发出的整个事件序列
返回全部事件是否符合某些条件的布尔值
All
返回任一事件是否符合某些条件的布尔值
Contains
返回事件源是否为空的布尔值
IsEmpty
返回序列是否与另一个事件源发出的序列是否相同的布尔值
SequenceEqual
发出所有数的平均值
Average
发出所有数的和
Sum
发出事件个数
Count
发出所有数中的最大值
Max
发出所有数中的最小值
Min
通过依次对每个事件应用聚合函数并发出结果
Scan
想将事件源转换为另一种对象或数据结构
To
想使用指定的调度器(Scheduler)
SubscribeOn
当通知观察者
ObserveOn
想事件源在发出事件时进行特定操作
Do
想事件源抛出一个错误
Throw
如果指定时间过去而没有发出事件
Timeout
想事件源能够优雅的恢复
超时切换到备用事件源
Timeout
捕获上游的错误通知
Catch
尝试重新订阅上游的事件源
Retry
想创建与事件源具有相同生命周期的可支配资源
Using
想订阅一个事件源并接受一个可能还没有完成的异步任务,阻塞直到事件源完成
Start
想要一个事件源,直到被需要到才开始向观察者发出事件
Publish
只发出序列中的最后一个事件
PublishLast
发出完整序列即使观察者在事件源开始发出事件后订阅
Replay
但是一旦所有观察者取消订阅则销毁
RefCount
当想要它开始发出事件
Connect

参考

按字母排序的操作符列表

公认的核心操作符名称以黑体字显示。 其他条目表示ReactiveX核心操作符集之外的特殊操作符或特定于语言的操作符的变体。