RxJava 入门引导


转载请标明出处:
http://blog.csdn.net/tyzlmjj/article/details/50696828
本文出自:【M家杰的博客】

概述
最近才刚开始去看RxJava相关的内容,看着看着就陷阱去了,总感觉自己落伍了,不谈别的,光看RxJava写出的代码就很必哟特佛。当然了,任何开源库的普及都需要建立在强大的功能上,恩,就是这样……
这边我整理了下自己看过感觉比较好的适合新手的中文博客。然后简单的把部分控制符的功能用中文描述了下。英文比较差,老是回头看英文文档好累。

注意:英语好的同学请往这边走RxJava WIKI


基础学习

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

注意:在安卓中使用RxJava最好把RxAndroid也同时引入

compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava: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。就是一个不管过程只看结果是否正确的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值