创建操作符
用于创建被观察者对象(Observable)对象和发送事件
create | 创建一个最基本的被观察者对象Observable |
just | 将对象或者对象集合转换成一个会发射这些对象的Observable |
defer | 在观察者订阅之前不创建这个Observable,为每一个观察者创建一个新的Observable |
fromeArray | 创建一个可以将一个数组转化为可被观察的序列,并且将它的数据逐个发射的Observable |
fromIterable | 创建一个可以接收一个 Iterable 容器作为输入,并且将它的数据逐个发射的Observable |
延时创建操作符 | |
timer | 创建一个在指定的延迟之后发射单个数据的Observable |
interval | 创建一个定时发射整数序列的Observable |
intervalRange | 创建一个指定范围内定时发射整数序列的Observable |
range | 创建一个发射指定范围的整数序列的Observable |
rangeLong | 创建一个发射指定范围的长整数序列的Observable |
特殊创建操作符 | |
empty | 创建一个不发射任何数据,直接通知完成后终止的Observable |
error | 创建一个不发射任何数据,直接通知错误后终止的Observable |
never | 创建一个不发射任何数据,也不终止的Observable |
变换操作符
用于对Observable发射的数据进行变换。将Observable发射的数据按照一定的规则做一些变换,然后再将变换的数据发射出去
map | 对Observable发射的每一项数据都应用一个函数来变换 |
flatMap | 使用一个指定的函数对原始Observable发射的每一项数据执行变换操作,这个函数返回一个本身也发射数据的Observable,然后FlatMap合并这些Observables发射的数据,最后将合并后的结果当做它自己的数据序列发射。 |
flatMapIterable | 和flatMap的作用一样,只不过返回的是Iterable而不是Observable |
concatMap | 它类似于flatMap,但是它最终输出的数据序列和原数据序列是一致,它是按顺序链接Observables,而不是合并(flatMap用的是合并) |
switchMap | 它和flatMap很像,除了一点,当原始Observable发射一个新的数据(Observable)时,它将取消订阅并停止监视产生之前那个数据的Observable,只监视当前这一个 |
cast | 在发射之前强制将Observable发射的所有数据转换为指定类型 |
scan | 对Observable发射的每一项数据应用一个函数,然后按顺序依次发射这些值 |
buffer | 可以简单的理解为缓存,它定期从Observable收集数据到一个集合,然后把这些数据集合打包发射,而不是一次发射一个 |
groupBy | 将原来的Observable拆分为Observable集合,将原始Observable发射的数据按Key分组,每一个Observable发射一组不同的数据 |
window | 定期将来自Observable的数据拆分成一些Observable窗口,然后发射这些窗口,而不是每次发射一项。类似于Buffer,但buffer发射的是数据,window发射的是Observable,每一个Observable发射原始Observable的数据的一个子集 |
过滤操作符
这些操作符用于从Observable发射的数据中进行选择,让Observable返回我们所需要的数据
根据指定条件过滤事件 | |
filter | 过滤特定条件的事件,不满足条件的事件将被过滤不发射 |
ofType | 过滤指定数据类型的事件 |
distinct | 过滤事件序列中重复的事件 |
distinctUntilChanged | 过滤事件序列中连续重复的事件 |
根据指定数量过滤事件 | |
take | 只发射开始的N项事件或者一定时间内的事件 |
takeLast | 只发射最后的N项事件或者一定时间内的事件 |
skip | 跳过开始的N项事件或者一定时间内的事件 |
skipLast | 跳过最后的N项事件或者一定时间内的事件 |
根据指定时间过滤事件 | |
sample | 在定期的时间内,只发送该段时间内最后一项事件,与 throttleLast() 操作符类似 |
debounce | 发送数据事件时,若2次发送事件的间隔<指定时间,就会丢弃前一次的数据重新计算时间,直到指定时间内都没有新数据发射时才会发送最后一次的数据事件 |
throttleFirst | 在定期的时间内,只发送该段时间内第一项事件 |
throttleLast | 在定期的时间内,只发送该段时间内最后一项事件 |
throttleWithTimeout | 发送数据事件时,若2次发送事件的间隔<指定时间,就会丢弃前一次的数据重新计算时间,直到指定时间内都没有新数据发射时才会发送最后一次的数据事件 |
timeout | 如果原始Observable在指定的时间内没有发射任何数据,就发射一个onError通知终止这个Observable,或继续执行一个备用的Observable |
根据指定位置过滤事件 | |
firstElement | 仅选取第一个数据事件 |
lastElement | 仅选取最后一个数据事件 |
ignoreElements | 丢弃所有数据,只保留发射错误或正常终止的通知(onError或onCompleted) |
elementAt | 指定接收某个元素(通过索引值确定)允许越界,即获取的位置索引 > 发送事件序列长度,可设置一个默认值当发生越界时将发射默认值 |
elementAtOrError | 在elementAt() 的基础上,当出现越界情况(即获取的位置索引 > 发送事件序列长度)时,即抛出异常 |
条件/布尔操作符
用于根据条件判断被观察者(Observable
)发射的事件是否符合条件或者对它们做布尔运算
all | 判断发射的所有数据,是否都满足设置的函数条件 |
contains | 判断发射的所有数据中,是否包含一个特定的值 |
isEmpty | 用于判断Observable发射完毕时,有没有发射数据。有数据false,如果只收到了onComplete通知则为true |
amb | 传递两个或多个Observable,它只发射其中首先发射数据或通知(onError或onCompleted)的那个Observable的所有数据,而其他所有的Observable的发射物将被丢弃 |
takeWhile | 当发射的数据满足某个条件时(不发射条件数据),Observable终止发射数据 |
takeUntil | 当发射的数据满足某个条件后(发射条件数据),或者提供第二个Observable,如果第二个Observable发射了一项数据或者发射了一个终止通知(onError或onCompleted),会停止发射原始Observable数据并终止 |
skipWhile | SkipWhile订阅原始的Observable,但是忽略它的发射物,直到你指定的某个条件变为false的那一刻,它开始发射原始Observable(发射条件数据) |
skipUntil | SkipUntil订阅原始的Observable,但是忽略它的发射物,直到第二个Observable发射了一项数据那一刻(发射数据后被终止)或发射完成通知(onComplete),它开始发射原始Observable |
defaultIfEmpty | 如果原始Observable正常终止后仍然没有发射任何数据,就发射一个默认值 |
switchIfEmpty | 如果原始Observable正常终止后仍然没有发射任何数据,就使用备用的Observable |
sequenceEqual | 判定两个Observables是否发射相同的数据序列。 传递两个Observable给SequenceEqual操作符,它会比较两个Observable的发射物,如果两个序列是相同的(相同的数据,相同的顺序,相同的终止状态),它就发射true,否则发射false |
合并操作符
用于将多个被观察者(Observable
)组合成一个单一的Observable和合并需要发送的事件
zip | 合并多个被观察者(Observable)发送的事件,生成一个新的事件序列(即组合过后的事件序列),并最终发送 |
concat | 组合多个被观察者(Observable <4个)一起发送数据,合并后按发送顺序串行执行,前一个没有发射完,是不能发射后面的,需要注意的是Observable.concat(a,b)等价于a.concatWith(b) |
concatArray | 组合多个被观察者(Observable)一起发送数据,合并后按发送顺序串行执行 |
concatDelayError | 使用concat操作符时,若其中一个被观察者发出onError事件,则会终止其他被观察者继续发送事件,若希望onError事件推迟到其他被观察者发送完事件之后再触发,即需要使用对应的concatDelayError操作符 |
concatArrayDelayError | 与concatDelayError() 操作符同理 |
merge | 组合多个被观察者(Observable <4个)一起发送数据,合并后按时间线并行执行,需要注意的是Observable.mergeWith(a,b)等价于a.mergeWith(b) |
mergeArray | 组合多个被观察者(Observable)一起发送数据,合并后按时间线并行执行 |
mergeDelayError | 使用merge操作符时,若其中一个被观察者发出onError事件,则会终止其他被观察者继续发送事件,若希望onError事件推迟到其他被观察者发送完事件之后再触发,即需要使用对应的mergeDelayError操作符 |
mergeArrayDelayError | 与mergeDelayError() 操作符同理 |
combineLatest | 当两个Observable 中的任何一个发送了数据后,将先发送了数据的Observable 的最新(最后)一个数据 与 另外一个Observable 发送的每个数据结合,最终基于该函数的结果发送数据 |
combineLatestDelayError | 作用类似于concatDelayError()和 mergeDelayError()操作符,即错误处理 |
startWith | 在发射原来的Observable的数据序列之前,追加发射一个指定的数据序列或数据项 |
startWithArray | 在发射原来的Observable的数据序列之前,追加发射多个指定的数据序列或数据项 |
算术/聚合操作符
算术操作符是属于可选的rxjava-math模块,这个模块需要导下面这个包,不支持Rxjava2所以Rxjava2用不了:
compile 'io.reactivex:rxjava-math:1.0.0'
用于对整个数据序列执行算法操作或其它操作,由于这些操作必须等待数据发射完成(通常也必须缓存这些数据),它们对于非常长或者无限的序列来说是危险的
算术操作符 | |
averageInteger | 求序列平均数并发射 |
averageLong | 求序列平均数并发射 |
averageFloat | 求序列平均数并发射 |
averageDouble | 求序列平均数并发射 |
max | 求序列最大值并发射 |
maxBy | 求最大key对应的值并发射 |
min | 求最小值并发射 |
minBy | 求最小Key对应的值并发射 |
sumInteger | 求和并发射 |
sumLong | 求和并发射 |
sumFloat | 求和并发射 |
sumDouble | 求和并发射 |
聚合操作符 | |
count | 计算数据项的个数并发射结果 |
reduce | 按顺序对Observable发射的每项数据应用一个函数并发射最终的值,跟scan操作符很类似,只是scan会输出每次计算的结果,而reduce只会输出最后的结果。 |
collect | 将原始Observable发射的数据放到一个单一的可变的数据结构中,然后返回一个发射这个数据结构的Observable |
toList | 收集原始Observable发射的所有数据到一个列表,然后返回这个列表 |
toSortedList | 收集原始Observable发射的所有数据到一个有序列表,然后返回这个列表 |
toMap | 将序列数据转换为一个Map,Map的key是根据一个函数计算的 |
toMultimap | 将序列数据转换为一个列表,同时也是一个Map,Map的key是根据一个函数计算的 |
连接操作符
ConnectableObservable与普通的Observable差不多,但是可连接的Observable在被订阅时并不开始发射数据,只有在它的connect()被调用时才开始
connect | 让一个可连接的Observable开始发射数据(即使没有任何订阅者订阅这个Observable,调用connect都会开始发射数据),connect方法返回一个Subscription对象,可以调用它的unsubscribe方法让Observable停止发射数据给观察者 |
publish | 将一个Observable转换为一个可连接的Observable,如果一个ConnectableObservable已经开始发射数据,再对其进行订阅只能接受之后发射的数据,订阅之前已经发射过的数据就丢失了 |
replay | 使用Replay操作符返回的ConnectableObservable 会缓存订阅者订阅之前已经发射的数据,这样即使有订阅者在其发射数据开始之后进行订阅也能收到之前发射过的数据。Replay操作符能指定缓存的大小或者时间,这样能避免耗费太多内存 |
refCount | RefCount操作符可以看做是Publish的逆向,它能将一个ConnectableObservable对象再重新转化为一个普通的Observable对象,如果转化后有订阅者对其进行订阅将会开始发射数据,后面如果有其他订阅者订阅,将只能接受之后发射的数据(这也是转化之后的Observable 与普通的Observable的一点区别) |
错误/重试操作符
被观察者(Observable
) 在发送事件时出现错误时处理或重试,并且可以设定重试的时间间隔
onErrorResumeNext | 当原始Observable在遇到错误时,使用备用Observable |
onExceptionResumeNext | 当原始Observable在遇到异常时,使用备用的Observable。与onErrorResumeNext类似,区别在于onErrorResumeNext可以处理所有的错误,onExceptionResumeNext只能处理异常 |
onErrorReturn | 当原始Observable在遇到错误时发射一个特定的数据并正常终止 |
retry | 当原始Observable在遇到错误时发射错误通知(onError)事件后触发重新订阅 |
retryWhen | 当原始Observable在遇到错误时发射错误通知(onError)时,将发生的错误传递给一个新的被观察者(Observable),并决定是否需要重新订阅原始被观察者(Observable)和发送事件 |
retryUntil | 当原始Observable在遇到错误时发射错误通知(onError)时,判断是否需要重新发送数据,具体使用类似于retry(Predicate predicate),唯一区别:返回 true 则不重新发送数据事件 |
repeat | 当原始Observable发射完成通知(onCompleted)事件后触发重新订阅 |
repeatWhen | 将原始Observable发射完成通知(onCompleted)转换成1个 Object 类型数据传递给1个新被观察者(Observable),以此决定是否重新订阅和发送原来的 Observable,如果返回的是onNext则触发重订阅,而返回的是onComplete/onError则不会触发重订阅 |
repeatUntil | 当原始Observable发射完成通知(onCompleted)时动态控制重复次数,如果返回true则不重复了,否则接着重复发送事件 |
阻塞操作符
在Rxjava1中的BlockingObservable已经在Rxjava2中去掉了,在Rxjava2中已经集成到了Observable中
blockingForEach | 对Observable发射的每一项数据调用一个方法,会阻塞直到Observable完成 |
blockingFirst | 阻塞直到Observable发射了一个数据,然后返回第一项数据 |
blockingMostRecent | 返回一个总是返回Observable最近发射的数据的iterable |
blockingLatest | 返回一个iterable,会阻塞直到或者除非Observable发射了一个iterable没有返回的值,然后返回这个值 |
blockingNext | 返回一个Iterable,阻塞直到Observable发射了另一个值,然后返回那个值 |
blockingLast | 阻塞直到Observable终止,然后返回最后一项数据 |
blockingIterable | 将Observable转换返回一个iterable |
blockingSingle | 如果Observable终止时只发射了一个值,返回那个值,否则抛出异常 |
blockingSubscribe | 在当前线程订阅,和blockingForEach类似 |
功能性操作符
辅助被观察者(Observable
) 在发送事件时实现一些功能性需求
subscribe | 订阅,即连接观察者和被观察者形成订阅关系 |
delay | 使被观察者在发射每项数据之前都延迟一段时间再发送事件,注意:delay不会平移onError通知,它会立即将这个通知传递给订阅者,同时丢弃任何待发射的onNext通知。但是它会平移一个onCompleted通知 |
delaySubscription | 延迟订阅原始Observable |
materialize | 将来自原始Observable的通知(onNext/onError/onComplete)都转换为一个Notification对象,然后再按原来的顺序发射出去 |
dematerialize | 与materialize操作符作用相反,将通知逆转回一个Observable |
timestamp | 给Observable发射的每个数据项添加一个时间戳 |
timeInterval | 给Observable发射的两个数据项间添加一个时间差,实现在OperatorTimeInterval中timeInterval |
cache | 缓存Observable发射的数据序列并发射相同的数据序列给后续的订阅者 |
using | 指示Observable创建一个只在它的生命周期内存在的资源,当Observable终止时这个资源会被自动释放 |
线程调度 | |
subscribeOn | 指定被观察者(Observable)自身在哪个调度器(线程)上执行,跟调用的位置没有关系,而且多次调用并不会起作用,只有第一次调用时指定的调度器有效。但是有一种情况特殊,就是在doOnSubscribe操作符之后调用,可以使doOnSubscribe在指定的调度器中执行。 |
observeOn | 指定一个观察者在哪个调度器(线程)上观察这个Observable,当每次调用observeOn操作符时,之后的观察者都会在选择的调度器上进行观察 |
unsubscribeOn | 指定取消订阅dispose之后调用doOnDispose在哪个调度器(线程)上执行,需在doOnDispose之后调用 |
do操作符在事件的生命周期中操作 | |
doOnNext | 在每次发射元素之前(onNext)调用 |
doOnComplete | 在发射完成通知之前(onCompleted)调用 |
doOnError | 在发射错误通知之前(onError )调用 |
doOnTerminate | Observable发送终止事件通知之前调用,无论正常发送完成 / 错误终止(onError / onCompleted) |
doOnEach | 对发射元素和发射通知进行了统一的封装,用于在发射数据事件之前调用(在doOnNext之前调用) |
doAfterNext | 在每次发射元素之后(onNext)调用 |
doAfterTerminate | Observable发送终止事件通知之后调用,无论正常发送完成 / 错误终止(onError / onCompleted) |
doOnSubscribe | 观察者订阅时调用 |
doFinally | 当所有的事件发射完毕Observable终止之后会被调用,无论正常发送完成 / 错误终止(onError / onCompleted)(在doAfterTerminate之前调用) |
doOnDispose | 当调用Disposable的dispose()之后调用 |
doOnLifecycle | Observable的生命周期监听回调,第一个参数的回调方法在回调onSubscribe()方法之前回调,第二个参数的回调方法在调用Disposable的dispose()方法之后被回调 |