一、创建型
一般在最上游,静态方法
操作符 | 说明 |
---|---|
create(emitter -> {}) | 通过emitter来发射事件,从而创建一个Observable<br />需要自己实现onNext()、onError()、onComplete()的逻辑 |
just(c) | 跟进给定的常量或表达式创建Observable<br />c如果是表达式,那在订阅前已经完成,成为常量,再次订阅也不会发生改变 |
defer(callable) | 比just灵活,订阅的时候才会创建Observable,并且为每个订阅者创建自己的Obserable<br />callable一般为静态回调 |
fromCallable(callable) | 通过Callable创建Observable<br />与defer略有不同,会更注重Observable的异步的情况 |
fromFuture(future) | 拥有更多异步可选项,并且可以设置调度器和超时时间 |
fromArray(array)<br />fromIterable(iterable) | 拆分数组、迭代器,依次发射事件 |
repeat(int) | 重复创建n个int数据的Observable |
range() | 创建数字区间数据的Observable |
interval() | 创建周期发射的Observable,默认调度器为computation |
timer() | 创建延时发射的Observable,默认调度器为computation |
二、转换型
进行数据转换,有输入,有输出
操作符 | 说明 |
---|---|
map(a -> b | a转成b |
flatMap(a -> observable | a转成observable |
concatMap(a -> observable | flatMap不能保证输出顺序和输入顺序一致,concatMap则是保证顺序的 |
flatMapIterable(a -> iterable) | a转为iterable,依次发射 |
scan((a, b) -> f(a, b) | f(a, b)的结果传递给下游,同时还会赋值给a,一直累计 |
三、功能型
传入参数即可,工具类型操作符
操作符 | 说明 |
---|---|
buffer(int) | 每集齐int个元素,作为一个集合发射到下游 |
buffer(int, timeUnit) | 每收集一段时间,收集到的元素作为一个集合发射到下游 |
window(int, timeUnit) | 与buffer类似,但会创建一个新的Observable |
cast(clazz) | 类型强转 |
timeout(int, timeUnit) | 超时抛异常或发射默认Observable |
startWith(c) | 在事件源之前先发射一个事件,经常配合timer使用 |
四、过滤型
跟进条件过滤输出
操作符 | 说明 |
---|---|
filter(a -> boolean) | 每集齐int个元素,作为一个集合发射到下游 |
take(int) | 取int项向下游发射 |
skip(int) | 忽略int项后,再向下游发射 |
elementAt(int) | 发射第int项 |
debounce(int, timeUnit) | 防抖,一段时间内无新事件传入才会把该事件向下游发出,否则遗弃 |
throttle(int, timeUnit) | 采样,一段时间内,只向下游发射第一个或最后一个接收到的事件 |
distinct() | 过滤重复元素 |
first() / last() | 只发送指定项或符合条件的指定项 |
五、组合型
组合多个Observable
操作符 | 说明 |
---|---|
merge(o1, o2) | 组合2个Observable,各自按照自己的顺序事件发射元素 |
concat(o1, o2) | 组合2个Observable,先发送的Observable发射完全部元素complete后才到另一个发射 |
amb((o1, o2)) | 先发射事件的Observable作为真正的Observable,其他的直接抛弃 |
zip((o1, o2) -> f(x, y)) | 组合2个Observable,两个Observable的元素一一对应的接收到才会组合 f(x, y)的结果向下游发射 |
combineLast((o1, o2) -> f(x, y)) | 组合2个Observable,不要求两个Observable的元素一一对应,接到任何新元素都会组合新的元素向下游发射,组合方法f(x, y)的x,y分别是连个Observable最新发出来的元素 |
五、重复与重试
操作符 | 说明 |
---|---|
repeat() | complete后自动重新订阅 |
repeatWhen(predict) | 满足条件时,complete则自动重新订阅 |
retry() | 抛异常则重试,只对其上游的error有效 |
retryWhen(errorObservable -> observable) | 抛异常时,满足条件重新订阅 |
六、异步转同步、阻塞
操作符 | 说明 |
---|---|
blockingFirst() | 阻塞并返回第一个收到的元素 |
blockingForEach(a - f(a)) | 阻塞每一个元素,直到complete。收到每个元素都调用回调去处理 |