操作符的含义其实就是函数,这也是 RxJava 强大之处,它有非常多的操作符支持各种场景,甚至可以自定义操作符。并且高级的地方在于,操作符还能组合使用,从概念上来说,事件流可以被拆分,可以再被合并。
就像 RxJava 核心概念 说的,Observable 代表的就是事件流,而每个操作符返回的是一个全新的 Observable,并不会对原有的 Observable 进行改动,这也是 Observable 能重复使用的前提。
另外,操作符虽然可以组合使用,但如果等效的情况下,能用一个操作符完成的事就不要用多个操作符组合了,那样可能会在性能上有所开销。
弹珠图,书中用到了这种图示,将抽象的操作符形象的展现。图的来源就不探究了,这样的展示还是挺形象的。

map
它表示可以对事件流中的每个事件进行特定转换。例如事件 T 将会转换成 R。

由 map 可以引出 RxJava 中一个重要操作符 flatMap。和 map 类似,但操作之后的返回是不一样的,事件 T 会被转换成 Observable<R>,也就是说会被转换成另一个事件流。(这样一来能做的事情就更多了,因为事件流不就能做很多操作符么)

如果想通过 flatMap 从一个事件中转换出一个集合事件流,可以用 flatMapIterable 操作符。书中的例子是说,一个客户对应着许多订单,倘若想通过客户获取到订单,那么就可以用这个操作符。
flatMap 不能保证事件先后顺序,原文是这么说的「flatMap() 不能对子事件抵达下游操作符/订阅者的顺序给出任何保证」,因此,为了保证顺序,可以使用 concatMap 操作符。但其实 flatMap 是有个重载,也可以达到这个效果,就是带事件数量控制的重载,flatMap(f, n),n 就表示可流动的最大事件数,当 n 为 1 时,就和 concatMap 是等效的。
以上即是 map 操作符相关的功能和概念。
网友评论