java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

转载请标明出处:
/content/7159056.html
本文出自:【M家杰的博客】
概述
最近才刚开始去看RxJava相关的内容,看着看着就陷阱去了,总感觉自己落伍了,不谈别的,光看RxJava写出的代码就很

必哟特佛

。当然了,任何开源的普及都需要建立在强大的功能上,恩,就是这样……
这边我整理了下自己看过感觉比较好的适合新手的中文博客。然后简单的把部分控制符的功能用中文描述了下。英文比较差,老是回头看英文文档好累。
注意:英语好的同学请往这边走RxJava WIKI

基础学习

深入浅出RxJava 一:基础篇
深入浅出RxJava 二:操作符
深入浅出RxJava 三–响应式的好处
深入浅出RxJava 四-在Android中使用响应式编程
这篇文章的话有部分内容过时了,不过还是很值得看看的
给 Android 开发者的 RxJava 详解
这篇文章内容很多,但是个人感觉讲解的条理不清晰,刚接触RxJava推荐看前面几篇。
注意:在安卓中使用RxJava最好把RxAndroid也同时引入

1compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:<a href="http://www.cfei.net/archives/tag/rxjava" title="浏览关于“rxjava”的文章" target="_blank" class="tag_link">rxjava</a>:1.1.0'

RxAndroid是RxJava在安卓上的扩展,目前就只有几个类。

控制符

RxJava的控制符茫茫多啊!这边简单的写了一些描述,还有很多,有闲暇的时间再更新吧……

创建Observable

Observable(被观察者)一般情况下就是RxJava代码的起点,先来一份创建它的控制符
英文地址
静态方法

方法名 描述
just( ) 最基本的创建方式,可以传入多个同类型的参数
from( ) 可以传入数组、集合、或线程返回值,它会将数组分解,省去手动遍历的步骤
create( ) 手动创建的方法,订阅者的onNext()、onCompleted()方法都需要在这里自己调用
defer( ) 延迟Observable的创建,直到被订阅。可以理解为提高一点性能,具体看官方推荐博客
range( ) 创建一个可发出一系列连续的整数的Observable,三个参数的方法可以指定线程
interval( ) 返回从0开始的长整型序列,可以传入开始的延迟时间、时间间隔、线程调度。试了下,好像不会停要自己手动停止
timer( ) 设置1个间隔时间,只会返回一次,返回值:0
empty( ) 会直接调用订阅者的onCompleted()方法。
error( ) 需要传入异常,会直接调用订阅者的onError()。
never( ) 执行之后什么反应都没有!

公有方法
需要创建实例之后调用。也就是用了上面的之后才能用这两个

方法名 描述
repeat( ) 复制Observable并重复,可以传入重复次数,不传参数的方法会无限重复下去
repeatWhen( ) 也是进行复制然后重复,但是他可以进行过滤操作,用起来其实不方便

转换Observable

英文地址

方法名 描述
map( ) 可以改变每一项的值甚至类型
flatMap( )
concatMap( )
andflatMapIterable( )
可以理解为map的增强版,返回类型是Observable< R >,可以将一项分解为多项(比如处理集合)。并且可以给onCompleted()和onError()加返回值,返回在onNext()中。
switchMap( ) 和上面类似,但这个方法比较单一
scan( ) 可以获取前一项和当前项进行处理。比如一个数列[0,1,2,3],可以处理当前项加上前面一项变成[0,1,3,6],还可以传入第0个数
groupBy( ) 将数据进行分组,在他的方法中返回键,最终返回的是GroupedObservable< K , T >
buffer( ) 使用缓冲区进行类似分组操作,最终返回的是list集合
window( ) 将数据分组成多个Observable,并且可以做很多操作:按时间间隔分段、跳过等等
cast( ) 没官方文档。进行类型转换,比如本来最终返回是ArrayList类型,

.cast(List.class)

之后就会强转成List。这个不实用,Float转Integer都不行

过滤

英文地址

方法名 描述
filter( ) 过滤不想要的元素,在方法中返回false即过滤掉这个元素
last( ) 取最后一项,过滤掉前面的。有参数的方法可以把最后一项也过滤掉!
lastOrDefault( ) 也是取最后一项,当没有数据或者判断最后一项不满足条件时返回设置的默认值。
takeLast( ) 取最后N项,过滤掉前面的。还可以设置取最后一段时间内的数据。默认运行在子线程
takeLastBuffer( ) 与takeLast基本一样,不过返回的数据变成了集合
skip( ) 跳过前面N项。或者还可以跳过多少时间。这个时间很独特,假设数据全部返回到订阅者需要10秒,你设置了跳过5秒,那么它只会返回后5秒的数据
skipLast( ) 跟上面反一下,从最后开始跳过
take( ) 只取N项,或者只取一个时间段内的数据
first( )
takeFirst( )
取第一项,过滤掉后面的。也可以做判断,把第一项也过滤了
firstOrDefault( ) 取第一项,当没有数据或者判断第一项不满足条件时返回设置的默认值。
elementAt( ) 取第N项,就像是取集合的第N项一样
elementAtOrDefault( ) 取第N项,还可以设置默认值以防止越界
sample( )
throttleLast( )
还是设置时间的,设置一个时间间隔,取这个时间间隔内最后一个数据。也可以放入一个Observable来取多个时间间隔的数据
throttleFirst( ) 跟上面一样,只是这个是取时间间隔内的第一个数据
throttleWithTimeout( )
debounce( )
设定一个时间间隔,这个时间间隔从每一项的返回开始,假如在这个时间间隔内没有其他的返回项,则返回这一项。也就是一个时间间隔内,只能有一个返回项
timeout( ) 设定时间间隔,从每一项返回开始计算这个间隔,如果这个间隔内没有任何项返回,那么做超时处理,就是调用onError(),也可以为这种情况设置默认的返回
distinct( ) 过滤掉重复项。也可以自己进行比较然后给出一个Key,方法会过滤掉重复的Key
distinctUntilChanged( ) 过滤掉连续的重复项。比如返回

1、1、1、2、2、2、1、2

,那么过滤后是

1、2、1、2

。当然,这个也可以自己判断然后给出Key。

ofType( ) 通过类过滤,比如这样

ofType(Integer.class )

,那么其它类型都会被过滤,只返回int

ignoreElements( ) 把返回的数据源全部过滤了。如果运行正常会调用

onCompleted()

,有异常就调用

onError

。就是一个不管过程只看结果是否正确的

RxJava开源库

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。