前言
本篇文章主要介绍Rxjava 2.x的一些常用的操作符,对Rxjava不熟悉的朋友可以先去看下我之前的两篇介绍
创建操作符
- create() 创建一个被观察者
1
public static <T> Observable<T> create(ObservableOnSubscribe<T> source)
1 | Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() { |
- just() 创建一个被观察者,并发送事件,发送的事件不可以超过10个以上。
1 | public static <T> Observable<T> just(T item) |
1 | Observable.just(1, 2, 3) |
使用just()方法创建Observable对象,Observable会将事件逐个发送
From 操作符
fromArray() 这个方法和 just() 类似,只不过 fromArray 可以传入一个数组
fromCallable() Callable 和 Runnable 的用法基本一致,只是它会返回一个结果值
- fromIterable() 直接发送一个 List 集合数据给观察者
1 | public static <T> Observable<T> fromArray(T... items) |
1 | public static <T> Observable<T> fromCallable(Callable<? extends T> supplier) |
1 | public static <T> Observable<T> fromIterable(Iterable<? extends T> source) |
- empty() 直接发送 onComplete() 事件
1 | Observable.empty() |
转换操作符
- map() map 可以将被观察者发送的数据类型转变成其他的类型,是一对一的转换
1 | public final <R> Observable<R> map(Function<? super T, ? extends R> mapper) |
- flatMap() 这个方法可以将事件序列中的元素进行整合加工,返回一个新的被观察者。
1 | public final <R> Observable<R> flatMap(Function<? super T, ? extends ObservableSource<? extends R>> mapper) |
flatMap() 其实与 map() 类似,但是 flatMap() 返回的是一个 Observerable。现在用一个map()的例子和flatMap()的例子来对比说明 flatMap() 的用法。
需求:我们现在需要通过学校拿到院系列表,然后在每个院系中拿到学生的信息.
传统的实现方式有很多种,我就不举例了,直接使用Rxjava实现:
1 | //学校 |
1 |
|
1 |
|
使用map()方法实现:
1 | //使用map()实现方式 |
1 | //使用flatMap()实现 |
以上代码中map()方法实现中,可以看到我们在onNext()方法中使用了for循环.如果代码逻辑在复杂一些,就可能需要嵌套for循环来实现,那就真的迷之缩进了,而使用flatMap()方法实现,只需要实现一个flatMap()转换一下就好了,随着代码逻辑增加,代码依然清晰,这就是flatMap()的强大之处,也是很多人喜欢使用Rxjava的原因所在.
- concatMap()
concatMap() 和 flatMap() 基本上是一样的,只不过 concatMap() 转发出来的事件是有序的,而 flatMap() 是无序的。
1 |
|
功能操作符
- delay() 延迟一段事件发送事件。
1 | 相当于handler的延迟发送事件 |
1 | public final Observable<T> delay(long delay, TimeUnit unit) |
- doOnSubscribe() Observable 每发送 onSubscribe() 之前都会回调这个方法。
此方法通常用来做准备工作,例如弹一个ProgressDialog提示用户, But,这里有一个小坑,特别拿出来说明一下:
前方有坑,请集中注意力
Observable.doOnSubscribe()方法是在subscribe() 调用后而且在事件发送前执行。默认情况下, doOnSubscribe() 执行在 subscribe() 发生的线程;而如果在 doOnSubscribe() 之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn() 所指定的线程。
1 | Observable.create(new ObservableOnSubscribe<String>() { |
- subscribeOn() 指定被观察者的线程,要注意的时,如果多次调用此方法,只有第一次有效。
1 | public final Observable<T> subscribeOn(Scheduler scheduler) |
- observeOn() 指定观察者的线程,每指定一次就会生效一次。
1 | public final Observable<T> observeOn(Scheduler scheduler) |
以上就是Rxjava常用的一些操作符介绍和使用方法实例了
- RxJava2 只看这一篇文章就够了这是玉刚说的一篇关于Rxjava常用API的介绍,基本囊括了Rxjava所用到的所有API,还有代码举例,也是强烈建议观看收藏
关于Rxjava系列二就到此结束啦,后面有时间我还会写写与retrofit2的结合使用,欢迎关注订阅!
欢迎关注作者darryrzhong,更多干货等你来拿哟.
请赏个小红心!因为你的鼓励是我写作的最大动力!
更多精彩文章请关注