java运算符学习收获 RxJava初步进阶-操作符

java运算符学习收获 RxJava初步进阶-操作符(1)

在上两篇介绍中我们把RxJava的基本概念和基本原理说明了。它为什么会大行其道,主要是因为它在线程切换,代码逻辑简洁度有非常好的体验。

如果你还不了解RxJava的特点的话,可以参考这两篇文章

五分钟带你感受RxJava的优雅

零基础理解RxJava和响应式编程

RxJava的优点不仅在线程切换和代码逻辑简洁性上。甚至可以说,相比起另一个特性,这些优点都算小巫见大巫。

这个特性就是变换。

变换这个词能比较恰当的描述RxJava的核心特性,但是要理解它需要很多准备知识。变换,是基于一个叫 lift() 的 api衍生出来的一堆api,要理解 lift()很不容易,

下面是RxJava源码中对于 lift()的注释的第一句话

This method requires advanced knowledge about building operators; please consider other standard composition methods first

RxJava的开发者都不建议一上来就去学 lift()的原理。

所以这篇文章先介绍一些基本的 api,在形成一定的概念和印象之后我们才进一步来接触RxJava的核心。

Operator

operator - 操作符,是 RxJava 中对于数据操作的接口定义。

/** * Operator function for lifting into an Observable. * @param <T> the upstream's value type (input) * @param <R> the downstream's value type (output) */ public interface Operator<R, T> extends Func1<Subscriber<? super R>, Subscriber<? super T>> { // cover for generics insanity }

单看operator也是一个很抽象的东西。可以这么具象化地来理解它,

RxJava把所有逻辑代码看成异步源和数据加观察者,对于数据的操作是通过各种 operator 来进行的。

比如网络请求,就是个异步源,以天气请求为例子,它可能返回多个城市的天气数据,我们可以对这些数据进行过滤(filter)取某些城市的值,或者单独取第一个城市的值(take)。

filter 和 take 都是操作符。

操作符是了解RxJava核心的切入点,在这之前我们看看RxJava都给我们封装了哪些操作符。

just() 和 from()

just()的作用非常简单,直接看代码比看定义来的快

Observable.just(1, 2, 3, 4, 5) .subscribe(new observer<Integer>() { .... @Override public void onNext(Integer integer) { //依次接受到12345 } });

注意这里省略了onCompleted和onError方法。

just()简单的把原始数据分发给 Observer,不作任何处理。

java运算符学习收获 RxJava初步进阶-操作符(2)

from()跟 just()几乎一样,区别只是 from()的参数是 array类型

Observable.from(new Integer[]{1, 2, 3, 4, 5});

filter()

顾名思义这是个过滤的操作符,比如我们要过滤数据中的偶数,只拿奇数的话

Observable .just(1, 2, 3, 4, 5) .filter(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { //检查是否奇数,奇数返回true,偶数返回false,false的会被过滤掉 return integer % 2 != 0; } });

这样在 observer 中就只会收到奇数。

java运算符学习收获 RxJava初步进阶-操作符(3)

skip()和take()

这两个差不多,就放到一起讲。用代码说明不如用图片说明,

skip(int n) 意思是跳过前n个数据,

java运算符学习收获 RxJava初步进阶-操作符(4)

take(int n) 表示只取前n个数据

java运算符学习收获 RxJava初步进阶-操作符(5)

merge()

merge()是一个非常有意思的operator,它把两个异步源的数据合并之后再发送给observer。

java运算符学习收获 RxJava初步进阶-操作符(6)

它的特别之处在于发送的顺序并不是把两个异步源的数据前后发送,而是混合到一起发送。用图片表示

高阶操作符

到这里我们还没有真正涉及到变换的概念。可能有些同学就要喷我了,

特么看了一整篇还没不讲重点?

别急,这篇的重点是在于知道 operator,而变换是在operator的基础上的。对操作符有了概念,才不至于在学变换的时候不知所云。

下篇我们要开始了解变换了,会从两个操作符开始,

map()和flatmap()

而这两个方法离不开上面介绍的最后一个操作符-merge()。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页