RxJava的操作符介绍:
创建操作符类型:负责创建Obervable对象
- just()–将一个或多个对象转换成发射这个或这些对象的一个Observable
- from()–将一个Iterable,一个Future,或者一个数组转换成一个Observable
- repeat()–创建一个重复发射指定数据或数据序列的Observable
- repeatWhen()–创建一个重复发射指定数据或者数据序列的Observable,它依赖于另一个Observable发射的数据
- create()–使用一个函数创建一个新的Observable
- defer()–只有当订阅者订阅才能创建Observable,为每个订阅创建一个新的Observable
- range()–创建一个发射指定范围的证书序列的Observable
- interval()–创建一个按照给定的时间间隔发射证书序列的Observable
- timer()–创建一个在给定的延时之后发射单个数据的Observable
- empty()–创建一个在什么都不做直接通知完成的Observable
- error()–创建一个什么都不做直接通知错误的Observable
- nerver()–创建一个不发射任何数据的Observable
变换操作符:用来对Observable发射的数据执行变化操作
- map()–对序列中的每一项都应用一个函数来变换Observable发射的数据序列
- flatMap(),concatMap(),and flatMapIterable()–将Observable发射的数据集合变换为Observables集合,然后将这些Observable发射的数据平坦化的放进一个单独的Observable
- switchMap()–将Observable发射的数据集合变换为Observables集合,然后只发射这些Observables最近发射的数据
- scan()–对Observable发射的每项数据应用一个函数,然后按顺序依次发射每个值
- groupBy()–将Observable分拆成Observable集合,将原始Observable发射的数据按key分组,每一个Observable发射一组不同的数据
- buffer()–它定期从Observable收集数据到一个集合,然后将这些数据集合打包发射,而不是一次发射一个
- window()–定期将来自Observable的数据分拆成一些Observable窗口,然后发射这些窗口,而不是每次发射一项
- cast()–在发射之前强制将Observable发射的所有数据转换为指定类型
过滤操作符:用于过滤和选择Observable发射的数据序列
- fiter()–过滤数据
- takeLast()–只发射最后的N项数据
- last()–只发射最后的一项数据
- lastOrDefault()–只发射最后的一项数据,若Observable为空发射默认值
- takeLastBuffer()–将最后的N项数据当做单个数据发射 skip()–跳过开始的N项数据
- take()–只发射开始的N项数据
- first( ) and takeFirst( )–只发射第一项数据,或者满足某种条件的第一项数据
- firstOrDefault( )–只发射第一项数据,如果Observable为空就发射默认值
- elementAt( )–发射第N项数据
- elementAtOrDefault( )–发射第N项数据,如果Observable数据少于N项就发射默认值
- sample( ) orthrottleLast( )–定期发射Observable最近的数
- throttleFirst( )–定期发射Observable发射的第一项数据
- throttleWithTimeout( ) or debounce( )–只有当Observable在指定的时间后还没有发射数据时,才发射一个数据
- timeout( )–如果在一个指定的时间段后还没发射数据,就发射一个异常
- distinct( )–过滤掉重复数据
- distinctUntilChanged( )–过滤掉连续重复的数据
- ofType( )–只发射指定类型的数据
- ignoreElements( )–丢弃所有的正常数据,只发射错误或完成通知
结合操作符:在多个Observable的组合时候使用
- startWith() – 在数据序列的开头增加一项数据
- merge()–将多个Observable合并成一个
- mergeDelayError()–合并多个Observables,让没有错误的Observable都完成后再发射错误通知
- zip()–使用一个函数组合多个Observable发射的数据集合,然后再发射这个结果
- and( ), then( ), and when( ) — (rxjava-joins) 通过模式和计划组合多个Observables发射的数据集合
- combineLatest( ) — 当两个Observables中的任何一个发射了一个数据时,通过一个指定的函数组合每个Observable发射的最新数据(一共两个数据),然后发射这个函数的结果
- join( ) and groupJoin( ) — 无论何时,如果一个Observable发射了一个数据项,只要在另一个Observable发射的数据项定义的时间窗口内,就将两个Observable发射的数据合并发射
- switchOnNext( ) — 将一个发射Observables的Observable转换成另一个Observable,后者发射这些Observables最近发射的数据
辅助操作符:用于Observable的辅助操作符
- materialize()–将Observable转换成一个通知列表
- dematerialize()–将通知列表转换成一个Observable
- timestamp()–将Observable发射的每个数据项添加一个时间戳
- serizlize()–强制Observable按次序发射数据并且要求功能完好
- cache()–记住Observable发射的数据序列并发射相同的数据序列给后续的订阅者
- observeOn()–指定观察者观察Observable的调度器
- subscribeOn()–制定Observable执行任务的调度器
- doOnEach( ) — 注册一个动作,对Observable发射的每个数据项使用
- doOnCompleted( ) — 注册一个动作,对正常完成的Observable使用
- doOnError( ) — 注册一个动作,对发生错误的Observable使用
- doOnTerminate( ) — 注册一个动作,对完成的Observable使用,无论是否发生错误
- doOnSubscribe( ) — 注册一个动作,在观察者订阅时使用
- doOnUnsubscribe( ) — 注册一个动作,在观察者取消订阅时使用
- finallyDo( ) — 注册一个动作,在Observable完成时使用
- delay( ) — 延时发射Observable的结果
- delaySubscription( ) — 延时处理订阅请求
- timeInterval( ) — 定期发射数据
- using( ) — 创建一个只在Observable生命周期存在的资源
- single( ) — 强制返回单个数据,否则抛出异常
- singleOrDefault( ) — 如果Observable完成时返回了单个数据,就返回它,否则返回默认数据
- toFuture( ), toIterable( ), toList( ) — 将Observable转换为其它对象或数据结构
####还有一些其他
在RxJava中通过Scheduler–调度器来指定代码再哪个线程中运行。
Scheduler.immediate():直接在当前线程运行,默认行为。
Scheduler.newThread():总是开启新线程,在新线程中执行操作。
Scheduler.io():读写文件、数据库、网络交互等操作使用。在io()内部使用一个无数量上限的线程池,可以重用空闲的线程,多数情况下io比newThread效率更高,不要把计算工作放在io中,避免创建不必要的线程。
Scheduler.computation():计算所使用的Scheduler。不会被IO等操作限制性能的操作,如图像的计算等。这个Scheduler使用固定的线程池,大小为CPU个数。
AndroidScheduler.mainThread():用来指定操作在Android主线程中运行。
通过subscribeOn()和observeOn()来对线程进行控制。
subscribeOn():指定subscribe()所发生的线程,Observable.OnSubscribe被激活时所处的线程。(事件产生的线程)
observeOn():指定subscribe运行的线程。(事件消费的线程)
Observable Observable = Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscribe<? super String> subscribe){
.....
subscribe.onNext(i+"");
subscribe.onCompleted();
}
});
observable.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
指定订阅者
Subscriber<String> subscriber = new Subscriber<String>(){
@Override
public void onCompleted(){
Toast.makeText(....);
}
@Override
public void onError(Throwable e){
Toast.makeText(....);
}
@Override
public void onNext(String s){
Toast.makeText(....);
}
}