美文网首页程序员
Android第三方---RxJava操作符

Android第三方---RxJava操作符

作者: 简书不简单iiii | 来源:发表于2019-03-13 10:17 被阅读0次

Create

主要用于产生一个 Obserable 被观察者对象,为了方便大家的认知,以后的教程中统一把被观察者 Observable 称为发射器(上游事件),观察者 Observer 称为接收器(下游事件)。

Map

Map 基本算是 RxJava 中一个最简单的操作符了,它的作用是对发射时间发送的每一个事件应用一个函数,使每一个事件都按照指定的函数去变化,

map<A,B>  A转化为B

Zip

zip 专用于合并事件,该合并不是连接(连接操作符后面会说),而是两两配对,也就意味着,最终配对出的 Observable 发射事件数目只和少的那个相同。

例如两个observable分别得事件最observable1(onNext(1) onNext(2)  ) observable2(onNext(A) onNext(B) onNext(C)  )使用zip发射后接受到的事件是1A  2B  两两对应

最终接收器收到的事件数量是和发送器发送事件最少的那个发送器的发送事件数目相同

Concat

对于单一的把两个发射器连接成一个发射器相当于集合合并

例如 observable.just(1,2,3)和observable.just(4,5,6)

使用concat以后就会变为123456

顺序是后者把数据给前者 并放到前者的后面

FlatMap

它可以把一个发射器 Observable 通过某种方法转换为多个 Observables,然后再把这些分散的 Observables装进一个单一的发射器 Observable。但有个需要注意的是,flatMap 并不能保证事件的顺序,

concatMap

它可以把一个发射器 Observable 通过某种方法转换为多个 Observables,然后再把这些分散的 Observables装进一个单一的发射器 Observable。但有个需要注意的是,concatMap 能保证事件的顺序,

distinct

去除重复数据

Observable.just(1, 1, 1, 2, 2, 3, 4, 5)

                .distinct()

输出12345

Filter

信我,Filter 你会很常用的,它的作用也很简单,过滤器嘛。可以接受一个参数,让其过滤掉不符合我们条件的值

buffer

改方法接受两个参数

如buffer(count,skip)

作用是 把一个observable(1,2,3,4,5)每次取count个数 每次跳过两个

123  345 5  第二次跳过了12 取了345  第三次跳过了34 只取到了5

timer

timer 很有意思,相当于一个定时任务

interval

如同我们上面可说,interval 操作符用于间隔时间执行某个操作,其接受三个参数,分别是第一次发送延迟,间隔时间,时间单位。第一次延迟了 3 秒后接收到,后面每次间隔了 2 秒。

doOnNext

它的作用是让订阅者在接收到数据之前干点有意思的事情。假如我们在获取到数据之前想先保存一下它,无疑我们可以这样实现。

skip

其实作用就和字面意思一样,接受一个 long 型参数 count ,代表跳过 count 个数目开始接收。

take

take,接受一个 long 型参数 count ,代表至多接收 count 个数据。

just

just,没什么好说的,其实在前面各种例子都说明了,就是一个简单的发射器依次调用 onNext() 方法。

Single

顾名思义,Single 只会接收一个参数,而 SingleObserver 只会调用 onError() 或者 onSuccess()。

Single.just(new Random().nextInt()) .subscribe(new SingleObserver<Integer>() {

@Override public void onSubscribe(@NonNull Disposable d) {

}

@Override public void onSuccess(@NonNull Integer integer) {

mRxOperatorsText.append("single : onSuccess : "+integer+"\n"); Log.e(TAG, "single : onSuccess : "+integer+"\n" );

}

@Override public void onError(@NonNull Throwable e) {

mRxOperatorsText.append("single : onError : "+e.getMessage()+"\n"); Log.e(TAG, "single : onError : "+e.getMessage()+"\n"); } });

debounce

去除发送频率过快的项,看起来好像没啥用处,但你信我,后面绝对有地方很有用武之地。debounce(500, TimeUnit.MILLISECONDS) 大于500会被去除

defer

简单地时候就是每次订阅都会创建一个新的 Observable,并且如果没有被订阅,就不会产生新的 Observable。

last

last 操作符仅取出可观察到的最后一个值,或者是满足某些条件的最后一项。

Observable.just(1, 2, 3).last(4)

输出3

merge

merge顾名思义,熟悉版本控制工具的你一定不会不知道 merge 命令,而在 Rx 操作符中,merge的作用是把多个Observable结合起来,接受可变参数,也支持迭代器集合。注意它和concat的区别在于,不用等到 发射器 A 发送完所有的事件再进行发射器 B 的发送。

reduce

reduce 操作符每次用一个方法处理一个值,可以有一个 seed 作为初始值。

scan

scan 操作符作用和上面的 reduce 一致,唯一区别是 reduce 是个只追求结果的坏人,而 scan 会始终如一地把每一个步骤都输出。

相关文章

网友评论

    本文标题:Android第三方---RxJava操作符

    本文链接:https://www.haomeiwen.com/subject/tnxzpqtx.html