RxJava 入门引导

来源:互联网 发布:qt交叉编译ubuntu下 编辑:程序博客网 时间:2024/06/06 09:08

转载请标明出处:
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。就是一个不管过程只看结果是否正确的
0 0
原创粉丝点击