哈喽,朋友们,好久不见了,有段时间没推文了。从今天开始,我将计划更新 RxJava2.x 系列的文章,RxJava 是什么东西,我想也不用给大家介绍了吧。
其实,网上关于 RxJava 的相关文章一大堆,我之前也看过不少,对于新手来说,那些文章,要么就是比较长,不容易看下去,要么就是讲的全是理论,晦涩难懂,缺少实践性。
因此,我打算从今天开始,更新一系列的 RxJava2.x 教程,主要从常用的操作符讲起,目的很简单,带大家每天学会一个操作符的使用。
操作符是 RxJava 的重要组成部分,因此学习操作符也是非常重要的,RxJava 的操作符虽然说比较多,但是我们可以将其进行分类,然后逐一进行理解学习,其实也是比较容易和轻松的,RxJava 的操作符大致可以分为以下几类:
今天,我们先来学习两个简单的创建操作符 create & just。
在学习之前,我们先来回顾下观察者模式,大多数同学应该都不陌生吧,例如 Android 的EventBus 等框架都使用了观察者模式,简单说这就是一种发布、订阅的模式,你可以简单理解为订阅报纸。
这与 RxJava 又有什么关系呢?我们先来看下 Rx 的概念:Rx 是一个使用可观察数据流进行异步编程的编程接口,也就是说 RxJava 中使用了观察者模式的这种编程思想,另外还结合了迭代器模式和函数式编程,并把它运用发挥到了极致。
我们都知道观察者模式中,有 3 个重要的概念,被观察者,观察者和订阅,类比到现实中订阅报纸的场景中就是,报纸是被观察者,阅读报纸的人是观察者,人订阅了报纸也就是说使用订阅将他们两者关联起来,这样就形成了一种发布、订阅的关系。
举个例子吧,我们来看看 Android 中点击事件的处理,注意:观察者模式与点击回调模式有很多的相似处,简单对比就是:回调是一对一的关系,只监听一个事件;观察者模式则是一个主题,可以有多个监听者,当主题变化时,向部分或所有监听者发出变化的通知,观察者模式是一对多的关系。
上面的代码很简单吧,我相信大家都能看得懂,一般我们习惯上将监听器写成匿名的,这里我是为了给大家做类比,所以分开写了,然后我们再结合观察者模式看看上面的代码,第一步实例化一个 Button 就相当于是创建了一个被观察者,第二步初始化一个监听器就相当于是创建了一个观察者,第三步将监听器和 Button 绑定就相当于是把被观察者和观察者通过订阅将他们两者关联起来,是不是理解起来非常简单。
我们再来看看 RxJava 如何来实现,我们就先从最简单的 Hello World 学习起来吧,同样的还是三步走!
第一步,创建被观察者(Observable)
第二步,创建观察者(Observer)
第三步,将被观察者和观察者绑定(subscribe)
和上面的点击事件对比一下,是不是感觉有异曲同工之妙?但是我们习惯上一般不分开写,而是将方法的调用写成链式调用,将对对象写成匿名的对象,我们将上面的代码变换下,如下所示:
我们看到,在上面的创建被观察者的 subscribe 方法中,调用了 onNext 方法,将 “Hello World” 字符串传递下去,而在下面调用 subscribe 的时候,传递了一个 Consumer 对象(观察者),而这个 Consumer 的回调方法就会收到 onNext 的传递过来的值,接着,我们在下面打印了一下 onNext 传递过来的字符串。
实际上,subscribe(订阅)是一个重载方法,它可以接收 0-4 个参数,当传递一个参数时,就代表接收处理成功时的回调(onNext),如传递多个参数则代表接收处理错误、完成、当订阅完成时的事件处理,我们这里为了演示,就只处理成功事件就行了。
上面的代码看着还是不太完美,我们这里使用 just 操作符将它改造一下,just 是什么鬼?看着怎么一脸懵逼,好吧,那就让大飞哥来给你讲解下 just 操作符。
just 操作符和 create 操作符一样,也是创建操作符的一种,just 操作符是将一个或多个对象转换成发射这个或这些对象的一个 Observable,看完概念还是一脸懵逼怎么办?确实,这些概念是比较抽象的,其实,用起来特别简单,当你会用了之后,你再回过头去理解起来会容易很多。
来继续将我们的 Hello World 用 just 操作符改造一下:
怎么样,是不是更简单了,我们点开 just 方法,我们看到它接收的是一个 T,也就是说它可以接收任意类型的参数,我们以后就可以使用 just 操作符来很方便的创建各种被观察者对象了,非常棒!我们又学会了一个操作符,欧耶!
上面的代码看着还是有点长,我们可以用 Lambda 表达式改造一下看看:
哇哦!It’s beautiful! 一行代码就搞定了,有木有?
至此,我们今天的学习目标就算达成了,感觉是不是很简单,很轻松?
如果你学会了就赶紧动手去实践一下吧,实践是检验真理的唯一标准,眼过千遍不如手过一遍,代码是用来敲的不是用来看的,希望我们程序员都是实干家!
今天的内容确实比较轻松和简单,后面还有更大的挑战呢,从今天开始,大飞哥将带你一起打怪升级练本领,一起去闯关,去战斗!大家敬请期待吧!
最后,引用大飞哥的一句名言作为结尾吧:“是兄弟,就一起去战斗吧!”
Ps:扫描下面的二维码,关注「IT大飞说」,回复「加群」,拉你进入兄弟战斗群,最后告诉你们一个小秘密,公号对话框回复「装备01」 送你一件珍藏版的打怪装备,战斗力瞬间可增加 80!!!我使用过,效果杠杠滴!从此,我们就可以一起愉快的装逼了!
飞哥带你去装逼,一直装逼到天黑!