定期将来自原始Observable的数据分解为一个Observable窗口,发射这些窗口,而不是每次发射一项数据Window和Buffer类似,但不是发射来自原始Observable的数据包,它发射的是Observables,这些Observables中的每一个都发射原始Observable数据的一个子集,最后发射一个onCompleted通知。
连续地对数据序列的每一项应用一个函数,然后连续发射结果Scan操作符对原始Observable发射的第一项数据应用一个函数,然后将那个函数的结果作为自己的第一项数据发射。它将函数的结果同第二项数据一起填充给这个函数来产生它自己的第二项数据。它持续进行这个过程来产生剩余的数据序列。这个操作符在某些情况下被叫做accumulator。RxJava实现了scan操作符。
对Observable发射的每一项数据应用一个函数,执行变换操作Map操作符对原始Observable发射的每一项数据应用一个你选择的函数,然后返回一个发射这些结果的Observable。RxJava将这个操作符实现为map函数。这个操作符默认不在任何特定的调度器上执行。
将一个Observable分拆为一些Observables集合,它们中的每一个发射原始Observable的一个子序列GroupBy操作符将原始Observable分拆为一些Observables集合,它们中的每一个发射原始Observable数据序列的一个子序列。哪个数据项由哪一个Observable发射是由一个函数判定的,这个函数给每一项指定一个Key,Key相同的数据会被同一个Observable发射。RxJava实现了groupBy操作符。
FlatMap将一个发射数据的Observable变换为多个Observables,然后将它们发射的数据合并后放进一个单独的ObservableFlatMap操作符使用一个指定的函数对原始Observable发射的每一项数据执行变换操作,这个函数返回一个本身也发射数据的Observable,然后FlatMap合并这些Observables发射的数据,最后将合并后的结果当做它自己的数据序列发射。
定期收集Observable的数据放进一个数据包裹,然后发射这些数据包裹,而不是一次发射一个值。Buffer操作符将一个Observable变换为另一个,原来的Observable正常发射数据,变换产生的Observable发射这些数据的缓存集合。Buffer操作符在很多语言特定的实现中有很多种变体,它们在如何缓存这个问题上存在区别。
这个页面展示了可用于对Observable发射的数据执行变换操作的各种操作符。
创建一个Observable,它在一个给定的延迟后发射一个特殊的值。Timer操作符创建一个在给定的时间段之后返回一个特殊值的Observable。RxJava将这个操作符实现为timer函数。timer返回一个Observable,它在延迟一段给定的时间后发射一个简单的数字0。timer操作符默认在computation调度器上执行。有一个变体可以通过可选参数指定Scheduler。
返回一个Observable,它发射一个类似于函数声明的值编程语言有很多种方法可以从运算结果中获取值,它们的名字一般叫functions, futures, actions, callables, runnables等等。在Start目录下的这组操作符可以让它们表现得像Observable,因此它们可以在Observables调用链中与其它Observable搭配使用。Start操作符的多种RxJava实现都属于可选的rxjava-async模块。
创建一个发射特定数据重复多次的ObservableRepeat重复地发射数据。某些实现允许你重复的发射某个数据序列,还有一些允许你限制重复的次数。RxJava将这个操作符实现为repeat方法。它不是创建一个Observable,而是重复发射原始Observable的数据序列,这个序列或者是无限的,或者通过repeat(n)指定重复次数。repeat操作符默认在trampoline调度器上执行。
创建一个发射特定整数序列的ObservableRange操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。RxJava将这个操作符实现为range函数,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)。range默认不在任何特定的调度器上执行。
创建一个发射指定值的ObservableJust将单个数据转换为发射那个数据的Observable。Just类似于From,但是From会将数组或Iterable的数据取出然后逐个发射,而Just只是简单的原样发射,将数组或Iterable当做单个数据。注意:如果你传递null给Just,它会返回一个发射null值的Observable。
创建一个按固定时间间隔发射整数序列的ObservableInterval操作符返回一个Observable,它按固定的时间间隔发射一个无限递增的整数序列。RxJava将这个操作符实现为interval方法。它接受一个表示时间间隔的参数和一个表示时间单位的参数。
将其它种类的对象和数据类型转换为Observable当你使用Observable时,如果你要处理的数据都可以转换成展现为Observables,而不是需要混合使用Observables和其它类型的数据,会非常方便。这让你在数据流的整个生命周期中,可以使用一组统一的操作符来管理它们。例如,Iterable可以看成是同步的Observable;Future,可以看成是总是只发射单个数据的Observable。
Empty创建一个不发射任何数据但是正常终止的ObservableNever创建一个不发射数据也不终止的ObservableThrow创建一个不发射数据以一个错误终止的Observable这三个操作符生成的Observable行为非常特殊和受限。测试的时候很有用,有时候也用于结合其它的Observables,或者作为其它需要Observable的操作符的参数。RxJava将这些操作符实现为 empty,never和error。
直到有观察者订阅时才创建Observable,并且为每个观察者创建一个新的ObservableDefer操作符会一直等待直到有观察者订阅它,然后它使用Observable工厂方法生成一个Observable。它对每个观察者都这样做,因此尽管每个订阅者都以为自己订阅的是同一个Observable,事实上每个订阅者获取的是它们自己的单独的数据序列。
Create使用一个函数从头开始创建一个Observable你可以使用Create操作符从头开始创建一个Observable,给这个操作符传递一个接受观察者作为参数的函数,编写这个函数让它的行为表现为一个Observable--恰当的调用观察者的onNext,onError和onCompleted方法。
这个页面展示了创建Observable的各种方法。
ReactiveX的每种编程语言的实现都实现了一组操作符的集合。不同的实现之间有很多重叠的部分,也有一些操作符只存在特定的实现中。每种实现都倾向于用那种编程语言中他们熟悉的上下文中相似的方法给这些操作符命名。本文首先会给出ReactiveX的核心操作符列表和对应的文档链接,后面还有一个决策树用于帮助你根据具体的场景选择合适的操作符。
如果你想给Observable操作符链添加多线程功能,你可以指定操作符(或者特定的Observable)在特定的调度器(Scheduler)上执行。某些ReactiveX的Observable操作符有一些变体,它们可以接受一个Scheduler参数。这个参数指定操作符将它们的部分或全部任务放在一个特定的调度器上执行。
关注时代Java