Android进阶系列之第三方库知识点整理。
知识点总结,整理也是学习的过程,如有错误,欢迎批评指出。
终于到操作符了,我觉得rxjava2
如此好用,绝对少不了操作符的功劳,下面这张图你就简单的扫一眼,别慌,我们慢慢啃。
上一篇讲了,rxjava
有五种观察者创建模式,其中Observable
和Flowable
差不多,只是Flowable
支持背压,而其它三种,都是简化版的Observable
,所以,本篇以Observable
方式来讲操作符的使用。
Observable
源码
Observable
是一个抽象类,继承ObservableSource
ObservableSource
:
一、创建操作符
这类操作符,创建直接返回Observable
1.1、嵌套回调事件
1.1.1、create
create
是最常用的一个操作符,该操作符的参数中产生的emitter
发射器,通过onNext
不断给下游发送数据,也可以发送onComplete
、onError
事件给下游。
需要发送给下游的数据,就通过emitter.onNext()给下游发送。
当发送了
onComplete
或者onError
事件后,下游停止接收剩下的onNext
事件
示意图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RiA67RuB-1585813744640)(https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/create.png)]
方法:
static <T> Observable<T> create(ObservableOnSubscribe<T> source)
demo:
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("A");
emitter.onNext("B");
// .....
emitter.onComplete();
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.d(TAG, "onNext: s=" + s);
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError");
}
@Override
public void onComplete() {
Log.i(TAG, "onComplete");
}
});
结果:
1.2、复杂数据遍历
这类操作符,直接将一个数组
、集合
拆分成单个ObJect数据依次发送给下游,也可以直接发送Object数据。
1.2.1、just
转换一个或多个 Object
数据,依次将这些数据发射到下游。
最多接收十个
Object
参数。
示意图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LkOwj266-1585813744643)(https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/just.item.png)]
方法:
A : 最多只接收十个参数。
Demo:
Observable.just("A", "B", "C", "D")
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d(TAG, "accept: s=" + s);
}
});
结果:
1.2.2、fromArray
直接传入一个数组数据,操作符将数组里面的元素按先后顺序依次发送给下游,可以发送十个以上的数据。
示意图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCRxFkVB-1585813744647)(https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/from.png)]
方法:
static <T> Observable<T> fromArray(T... items)
Demo:
String[] data = new String[]{
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"};
Observable.fromArray(data)
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d(TAG, "fromArray--accept: s=" + s
);
}
});
结果:
1.2.3、fromIterable
直接传入一个集合数据,操作符将集合里面的元素按先后顺序依次发送给下游,可以发送十个以上的数据。
示意图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XR31LkKj-1585813744650)(https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/fromIterable.png)]
方法:
static <T> Observable<T> fromIterable(Iterable<? extends T> source)
Demo:
List<String> mData = new ArrayList<>();
mData.add("A");
mData.add("B");
mData.add("C");
Observable.fromIterable(mData)
.subscribe(new Consumer