博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试神器第二弹:Rxjava熟悉——操作符
阅读量:4294 次
发布时间:2019-05-27

本文共 3006 字,大约阅读时间需要 10 分钟。

上期简单讲了Rxjava的入门,方便大家认识Rxjava,这期带大家了解Rxjava,认识Rxjava的更多特性

Rxjava操作符

Rxjava操作符就是各种方法,每种方法能够帮助我们处理一种情况,Rxjava的强大也就在于这些方法的使用。下面大家认识一下几个比较常用的操作符(方法)

这里写图片描述

Observable.create:

这里写图片描述

这是最简单操作符,用于创建一个Observable(被观察者),该方法在上一期中已经讲了,忘了的同学请点击查看,原理图如下:

Observable.from:

这个操作符的作用是 将一个Iterable, 一个Future, 或者一个数组,内部通过代理的方式转换成一个Observable,并且一次发射到观察者(Observer、Subscription)中的回调中!如下例:

Observable.from(files)    .flatMap(new Func1
>() { @Override public Observable
call(File file) { return Observable.from(file.listFiles()); } })
Observable.just:

将一个或多个对象转换成发射这个或这些对象的一个Observable

当一个对象的时候的流程图如下:
这里写图片描述

当多个对象的时候流程图如下:

这里写图片描述

创建的Observable会发射到观察者中去,如果多个对象会依次发射,图中表现很明显。

使用方法如下:

Observable.just(file1, file2...)    .flatMap(new Func1
>() { @Override public Observable
call(File file) { return Observable.from(file.listFiles()); } })

最多支持10个参数,使用者可以在源码中查看

Observable.empty/Observable.error/Observable.never:
  • empty: 创建一个什么都不做直接通知完成的
  • error: 创建一个什么都不做直接通知错误的Observable
  • never: 创建一个什么都不做的Observable
Observable observable1 = Observable.empty();//直接调用onCompleted。    Observable observable2 = Observable.error(new RuntimeException());//直接调用onError,常用于自定义异常    Observable observable3 = Observable.never();//什么都不做

Observable.merge/zip/startWith/concat

  • merge:将多个Observable合并为一个。merge不是按照添加顺序连接,而是按照时间线来连接。其中mergeDelayError将异常延迟到其它没有错误的Observable发送完毕后才发射。而merge则是一遇到异常将停止发射数据,发送onError通知。

    这里写图片描述

    • zip:使用一个函数组合多个Observable发射的数据集合,然后再发射这个结果。如果多个Observable发射的数据量不一样,则以最少的Observable为标准进行压合。内部通过OperatorZip进行压合。
      这里写图片描述
Observable
observable1=Observable.just(1,2,3,4);Observable
observable2=Observable.just(4,5,6); Observable.zip(observable1, observable2, new Func2
() { @Override public String call(Integer item1, Integer item2) { return item1+"and"+item2; } }).subscribe(item->Log.d("JG",item)); //1and4,2and5,3and6
  • concat: 按顺序连接多个Observables。需要注意的是Observable.concat(a,b)等价于a.concatWith(b)。
    这里写图片描述
Observable
observable1=Observable.just(1,2,3,4); Observable
observable2=Observable.just(4,5,6); Observable.concat(observable1,observable2) .subscribe(item->Log.d("JG",item.toString()));//1,2,3,4,4,5,6
  • startWith: 在数据序列的开头增加一项数据。startWith的内部也是调用了concat
    这里写图片描述
Observable.just(1,2,3,4,5)            .startWith(6,7,8)    .subscribe(item->Log.d("JG",item.toString()));//6,7,8,1,2,3,4,5

Observable.filter/distinct

  • filter 过滤数据。找到符合你规则的数据。
    这里写图片描述
Observable.just(3,4,5,6)            .filter(new Func1
() { @Override public Boolean call(Integer integer) { return integer>0; } }).subscribe(item->Log.d("JG",item.toString())); //5,6
  • distinct:过滤重复数据,内部通过OperatorDistinct实现。
Observable.just(3,4,5,6,3,3,4,9)       .distinct()      .subscribe(item->Log.d("JG",item.toString())); //3,4,5,6,9

更多的操作符可以去官网查看文档:

其实,读懂上面的几个操作符,熟悉上面的图片上的流程基本能理解Rxjava的操作符。这些都只是简单了解,下期我们为大家介绍Rxjava核心的部分—–异步!

欢迎关注公众号:码老板

这里写图片描述

你可能感兴趣的文章
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>
href="javascript:void(0)"
查看>>
h:panelGrid、h:panelGroup标签学习
查看>>
f:facet标签 的用法
查看>>
<h:panelgroup>相当于span元素
查看>>
java中append()的方法
查看>>
必学高级SQL语句
查看>>
经典SQL语句大全
查看>>
Eclipse快捷键 10个最有用的快捷键
查看>>
log日志记录是什么
查看>>
<rich:modelPanel>标签的使用
查看>>
<h:commandLink>和<h:inputLink>的区别
查看>>
<a4j:keeyAlive>的英文介绍
查看>>
关于list对象的转化问题
查看>>
VOPO对象介绍
查看>>
suse创建的虚拟机,修改ip地址
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>
docker容器秒死的解决办法
查看>>