RxJava进阶一(创建类操作符)
RxJava进阶二(转换类操作符)
RxJava进阶三(过滤类操作符)
RxJava进阶四(组合类操作符)


前面已经对RxJava原理进行介绍,相信大家对于RXJava已经有了初步的认识,但是在具体使用方面还有些懵懂,从这篇开始详细介绍下RxJava的具体使用,首先介绍下RXJava的创建操作符~

操作符总览

create、just、from、defer、range、interval、timer、empty、never
、error、repeat、delay…

具体使用介绍

create

create是RxJava最基本的创建操作符了,使用也是最简单的~

代码调用

        Observable.create(new Observable.OnSubscribe<Integer>() {@Overridepublic void call(Subscriber<? super Integer> subscriber) {subscriber.onNext(1);subscriber.onNext(2);subscriber.onNext(3);subscriber.onNext(4);subscriber.onCompleted();}}).subscribe(new Subscriber<Integer>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable e) {System.out.println("Error = " + e.getMessage());}@Overridepublic void onNext(Integer integer) {System.out.println("integer = " + integer);}});

运行结果如下

just

just操作符将某个对象转化为Observable对象,并且将其发射出去,可以使一个数字、一个字符串、数组、Iterate对象等,是一种非常快捷的创建Observable对象的方法~

        List<String> stringList = new ArrayList<>();stringList.add("one");stringList.add("two");stringList.add("three");Observable.just(stringList).subscribe(new Subscriber<List<String>>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(List<String> strings) {}});

从代码很清楚的看到,在onNext方法中输出的是 List 对象。

from

from操作符用来将某个对象转化为Observable对象,并且依次将其内容发射出去,from的接收值可以是集合或者数组,这个类似于just,但是just会将这个对象整个发射出去。比如说一个含有3个元素的集合,from会将集合分成3次发射,而使用just会发射一次来将整个的数组发射出去~

        List<String> stringList = new ArrayList<>();stringList.add("one");stringList.add("two");stringList.add("three");Observable.from(stringList).subscribe(new Subscriber<String>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable e) {System.out.println("Error = " + e.getMessage());}@Overridepublic void onNext(String s) {System.out.println("String = " + s);}});

很明显,from对集合或数组对象进行了遍历输出。

defer

Defer操作符只有当有Subscriber来订阅的时候才会创建一个新的Observable对象,也就是说每次订阅都会得到一个刚创建的最新的Observable对象,这可以确保Observable对象里的数据是最新的,而just则没有创建新的Observable对象,这样说可能并不利于大家消化,看下边与just对比示例~

        Action1<String> action1 = new Action1<String>() {@Overridepublic void call(String s) {System.out.println(s);}};// deferObservable<String> defer = Observable.defer(new Func0<Observable<String>>() {@Overridepublic Observable<String> call() {Object o = new Object();return Observable.just("defer : hashCode  = " + o.hashCode());}});defer.subscribe(action1);defer.subscribe(action1);defer.subscribe(action1);// justObservable<String> just = Observable.just("just : hashCode  = " + new Object().hashCode());just.subscribe(action1);just.subscribe(action1);just.subscribe(action1);

输出结果

从输出结果可以看出来,defer订阅了三次,但是每次的地址值都发生了变化,而just则三次的地址值是同样的,从而验证了上面的结论。

range

Range操作符根据输入的初始值【initial】和数量【number】发射number次、大于等于initial的值~

        Observable.range(100, 5).subscribe(new Action1<Integer>() {@Overridepublic void call(Integer integer) {System.out.println(integer);}});

interval

Interval所创建的Observable对象会从0开始,每隔固定的时间发射一个数字,需要注意的是这个对象是运行在computation Scheduler,所以要更新UI需要在主线程中进行订阅~

        Observable.interval(1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Long>() {@Overridepublic void call(Long aLong) {System.out.println(aLong);}});

输出结果

timer

Timer会在指定时间后发射一个数字0,注意其也是运行在computation Scheduler~

        Observable.timer(2, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {// 替代timertask与handler延迟,可以在这跳转主界面});

下面有几个不常用的创建操作符,还是简单介绍下吧~

empty

创建一个Observable不发射任何数据、而是立即调用onCompleted方法终止~

        Observable<String> empty = Observable.empty();empty.subscribe(new Subscriber<String>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(String s) {System.out.println("onNext");}});

输出结果

never

创建一个Observable不发射任何数据、也不给订阅ta的Observer发出任何通知~

        Observable<String> never = Observable.never();never.subscribe(new Subscriber<String>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable e) {System.out.println(e.getMessage());}@Overridepublic void onNext(String s) {System.out.println("onNext");}});

输出结果

error

返回一个Observable,当有Observer订阅ta时直接调用Observer的onError方法终止

        Observable<String> error = Observable.error(new Throwable("Observable.error"));error.subscribe(new Subscriber<String>() {@Overridepublic void onCompleted() {System.out.println("onCompleted");}@Overridepublic void onError(Throwable e) {System.out.println(e.getMessage());}@Overridepublic void onNext(String s) {System.out.println("onNext");}});

输出结果


接下来有两个不是创建类操作符,但是行为能力与创建类操作符非常相似,故在此介绍下~

repeat

Repeat会将一个Observable对象重复发射,接收值是发射的次数,依然订阅在 computation Scheduler~

        Observable.just(1).repeat(10).subscribe(new Action1<Integer>() {@Overridepublic void call(Integer integer) {System.out.println(integer);}});

输出结果

delay

功能与timer操作符一样,但是delay用于在事件中,可以延迟发送事件中的某一次发送~

Observable.just(1).delay(2,TimeUnit.SECONDS).subscribe(new Action1<Integer>() {@Overridepublic void call(Integer integer) {System.out.println(integer);}});

结语

创建类操作符,就简单介绍到这里,希望能够对同学有所帮助,谢谢~

RxJava进阶一(创建类操作符)相关推荐

  1. 初识RxJava(三)转换类 操作符

    前言: 昨天的两篇介绍了 RxJava 的创建类操作符和延时类操作符,今天笔者记录一下 转换类 操作符,不太监了 ,开始记笔记.对了具体不太清楚转换过程的 可以去拜读 这位大佬 Season_zlc ...

  2. Python进阶:理解元类创建类ABCMeta

    Python进阶:Python进阶:理解元类创建类ABCMeta 一.理解元类(Meta class) 1.1 元类直观理解 1.2 Python官方文档给出的元类描述 二.理解抽象基类(ABC, A ...

  3. 如何在电脑上创建python_python怎么创建类Python中的除法

    在C/C++语言对于整形数执行除法会进行地板除(舍去小数部分).例如 int a=15/10; a的结果为1. 同样的在Java中也是如此,所以两个int型的数据相除需要返回一个浮点型数据的时候就需要 ...

  4. C++ 对象和实例的区别,以及用new和不用new创建类对象区别

    起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题.当然这都是跟new的用法有关的.ne ...

  5. RxJava系列四(过滤操作符)

    转载请注明出处:https://zhuanlan.zhihu.com/p/21966621 RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) Rx ...

  6. vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务

    vert.x 中断了将近半年后发表了一篇新文章. 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程. 我们将涵盖以下主题: 使用Maven创建一个空 ...

  7. 使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务

    中断了将近半年后发表了一篇新文章. 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程. 我们将涵盖以下主题: 使用Maven创建一个空的vert.x ...

  8. python 元类 type_Python 使用元类type创建类对象常见应用详解

    本文实例讲述了Python 使用元类type创建类对象.分享给大家供大家参考,具体如下: type("123") 可以查看变量的类型;同时 type("类名", ...

  9. Python面试常用的高级用法,怎么动态创建类?

    元类是Python当中的 高级用法 ,如果你之前从来没见过这个术语或者是没听说过这个概念,这是非常正常的,因为一方面它的 使用频率不高 ,另外一方面就是它相对 不太容易理解 .以至于很多Python开 ...

最新文章

  1. 2020年人工神经网络第二次作业-参考答案第二题
  2. 众推平台架构——分布式爬虫
  3. 错误日志这样排查,干活更得劲了!!
  4. Winform中设置BackgroundWorker在取消时关闭后台进程
  5. 【Let‘s Go】Go语言入门篇
  6. iOS中 Animation 动画大全 韩俊强的博客
  7. 转-《高性能mysql》并不是一本好书——SQL笔记
  8. 【文件系统】浅解释FAT32
  9. vue-router之路由钩子(八)
  10. Ubuntu 安装 gcc-4.8
  11. IDEA查看或修改JDK版本
  12. JavaWeb学习DAY2—Java web的创建
  13. linux usb有线网卡驱动_Linux系统下安装USB无线网卡驱动方法
  14. 新版Airplayer--新功能介绍
  15. 电脑可以上网但打不开微信公众号
  16. C# 拼图游戏(超详细)
  17. html重置怎么使用图片,路由器重置后怎么设置_路由器重置设置【图文教程】-太平洋IT百科...
  18. nss什么意思计算机网络用语,扩列cqy是什么意思,nss又是什么意思
  19. 『broadview2006』博文视点在SD2.0大会上以书会友
  20. bsd 运行Linux软件,BSD操作系统 FreeBSD

热门文章

  1. Python 关于大文件的读写
  2. oracle exadata 多少钱,oracle exadata
  3. 8.12 Python web前端 HTML认识
  4. nodejs实现阿里云短信验证码
  5. python将html转换为pdf,如何使用Python将HTML转换为PDF
  6. 连你女朋友都能看懂的分布式架构原理!
  7. 使用matlab从气象数据文件提取所需站点信息到excel
  8. STC系列芯片的串口通信编程
  9. 计算机基础试题及答案
  10. 情感驿站 | 为人处世的行为准则总结