前言
在 RxJava 中,上游和下游的界限有时候并不是很明显。我的理解是:RxJava 的上下游的区分需要以观察者为比较的参照物,在观察者的之前的,都是可以看着上游。
如下面的 map()
变换操作符,just()
和 map()
操作符都可以看着上游,因为观察者订阅事件是发生在 Consumer
匿名对象中。
变换型操作符实战
# map()
1 | private void learnRxMap() { |
操作符 map()
可以看着上下游的之间的节点,把上游的 Integer
类型的变量,变换为 String
类型的字符串,而 map()
作为中间的节点可以变换上游的事件性质;
# flatMap()
1 |
|
操作符 flatMap
作为 RxJava 的中介节点,可以像 map()
操作一样,变换上游的事件性质,同时在还可以通过 ObservableSource<?>>()
在变换事件性质的同时,同时向下游多次发射事件。
1 | private void learnRxFlatMap() { |
操作符 flatMap()
在把上游的事件变换为多个事件继续向下游发射的同时,并不是顺序向下游发射的。
# concatMap()
1 | private void learnRxConcatMap() { |
变换操作符 concatMap()
和 flatMap()
操作符的功能一样,也是可以把上游的事件变换成多个事件向下游发送,但是 concatMap()
在多次发射事件的时候,是排序向下游发送的。
# groupBy()
1 | private void learnRxGroupBy() { |
操作符 groupBy()
的作用主要是在其节点中,把上游的事件按照一定的标准分类成 group
,然后再发送往下游。但下游需要按照一定的模板才可以把 group
分类出来。
# buffer()
1 | private void learnRxBuffer() { |
对于上游有大量的事件发送下来的时候,如果需要先把事件缓存到指定的数量后,再往下游发送,则变换操作符 buffer()
可以做到先缓存事件到指定的数量,然后再把缓存的事件一起发送往下游。