主要用于产生一个 Obserable 被观察者对象,为了方便大家的认知,以后的教程中统一把被观察者 Observable 称为发射器(上游事件),观察者 Observer 称为接收器(下游事件)。
Map 基本算是 RxJava 中一个最简单的操作符了,它的作用是对发射时间发送的每一个事件应用一个函数,使每一个事件都按照指定的函数去变化,
map<A,B> A转化为B
zip 专用于合并事件,该合并不是连接(连接操作符后面会说),而是两两配对,也就意味着,最终配对出的 Observable 发射事件数目只和少的那个相同。
例如两个observable分别得事件最observable1(onNext(1) onNext(2) ) observable2(onNext(A) onNext(B) onNext(C) )使用zip发射后接受到的事件是1A 2B 两两对应
最终接收器收到的事件数量是和发送器发送事件最少的那个发送器的发送事件数目相同
对于单一的把两个发射器连接成一个发射器相当于集合合并
例如 observable.just(1,2,3)和observable.just(4,5,6)
使用concat以后就会变为123456
顺序是后者把数据给前者 并放到前者的后面
它可以把一个发射器 Observable 通过某种方法转换为多个 Observables,然后再把这些分散的 Observables装进一个单一的发射器 Observable。但有个需要注意的是,flatMap 并不能保证事件的顺序,
它可以把一个发射器 Observable 通过某种方法转换为多个 Observables,然后再把这些分散的 Observables装进一个单一的发射器 Observable。但有个需要注意的是,concatMap 能保证事件的顺序,
去除重复数据
Observable.just(1, 1, 1, 2, 2, 3, 4, 5)
.distinct()
输出12345
信我,Filter 你会很常用的,它的作用也很简单,过滤器嘛。可以接受一个参数,让其过滤掉不符合我们条件的值
改方法接受两个参数
如buffer(count,skip)
作用是 把一个observable(1,2,3,4,5)每次取count个数 每次跳过两个
123 345 5 第二次跳过了12 取了345 第三次跳过了34 只取到了5
timer 很有意思,相当于一个定时任务
如同我们上面可说,interval 操作符用于间隔时间执行某个操作,其接受三个参数,分别是第一次发送延迟,间隔时间,时间单位。第一次延迟了 3 秒后接收到,后面每次间隔了 2 秒。
doOnNext
它的作用是让订阅者在接收到数据之前干点有意思的事情。假如我们在获取到数据之前想先保存一下它,无疑我们可以这样实现。
其实作用就和字面意思一样,接受一个 long 型参数 count ,代表跳过 count 个数目开始接收。
take,接受一个 long 型参数 count ,代表至多接收 count 个数据。
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(500, TimeUnit.MILLISECONDS) 大于500会被去除
简单地时候就是每次订阅都会创建一个新的 Observable,并且如果没有被订阅,就不会产生新的 Observable。
last 操作符仅取出可观察到的最后一个值,或者是满足某些条件的最后一项。
Observable.just(1, 2, 3).last(4)
输出3
merge顾名思义,熟悉版本控制工具的你一定不会不知道 merge 命令,而在 Rx 操作符中,merge的作用是把多个Observable结合起来,接受可变参数,也支持迭代器集合。注意它和concat的区别在于,不用等到 发射器 A 发送完所有的事件再进行发射器 B 的发送。
reduce 操作符每次用一个方法处理一个值,可以有一个 seed 作为初始值。
scan 操作符作用和上面的 reduce 一致,唯一区别是 reduce 是个只追求结果的坏人,而 scan 会始终如一地把每一个步骤都输出。
网友评论