RxJava2.0——變換操作符
map()
Observable.create(new ObservableOnSubscribe<Integer>() {
// 1. 被觀察者傳送事件 = 引數為整型 = 1、2、3
@Override
public void subscribe(@NonNull ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onComplete();
}
// 2. 使用Map變換操作符中的Function函式對被觀察者傳送的事件進行統一變換:整型變換成字串型別
}).map(new Function<Integer, String>() {
@Override
public String apply(@NonNull Integer integer) throws Exception {
return "整型" + integer + " 變換成 字串型別" + integer;
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.d(TAG, "onSubscribe");
}
@Override
public void onNext(@NonNull String s) {
Log.d(TAG, "onNext" + s);
}
@Override
public void onError(@NonNull Throwable e) {
Log.d(TAG, "onError");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete");
}
});
FlatMap()
作用:將被觀察者傳送的事件序列進行 拆分 & 單獨轉換,再合併成一個新的事件序列,最後再進行傳送
注:新合併生成的事件序列順序是無序的,即 與舊序列傳送事件的順序無關
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(@NonNull ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
}
}).flatMap(new Function<Integer, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(@NonNull Integer integer) throws Exception {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 2; i++) {
list.add("我是事件 " + integer + "拆分後的子事件" + i);
}
return Observable.fromIterable(list);
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d(TAG, s);
}
});
ConcatMap()
作用:類似FlatMap()
操作符
與FlatMap()的 區別在於:拆分 & 重新合併生成的事件序列 的順序 = 被觀察者舊序列生產的順序
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(@NonNull ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
}
}).concatMap(new Function<Integer, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(@NonNull Integer integer) throws Exception {
final List<String> list = new ArrayList<>();
for (int i = 0; i < 2; i++) {
list.add("我是事件 " + integer + "拆分後的子事件" + i);
// 通過concatMap中將被觀察者生產的事件序列先進行拆分,再將每個事件轉換為一個新的傳送三個String事件
// 最終合併,再傳送給被觀察者
}
return Observable.fromIterable(list);
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d(TAG, s);
}
});
Buffer()
作用:
定期從 被觀察者(Obervable)需要傳送的事件中 獲取一定數量的事件 & 放到快取區中,最終傳送
應用場景:
快取被觀察者傳送的事件
Observable.just(1,2,3,4,5)
.buffer(3,1)// 設定快取區大小 & 步長
// 快取區大小 = 每次從被觀察者中獲取的事件數量
// 步長 = 每次獲取新事件的數量
.subscribe(new Observer<List<Integer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.d(TAG, "對Subscribe事件作出響應" );
}
@Override
public void onNext(@NonNull List<Integer> integers) {
Log.d(TAG, " 快取區裡的事件數量 = " + integers.size());
for (Integer value : integers) {
Log.d(TAG, " 事件 = " + value);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.d(TAG, "對Error事件作出響應" );
}
@Override
public void onComplete() {
Log.d(TAG, "對Complete事件作出響應");
}
});
相關文章
- RxJava2.0 操作符(3)—— Filter 過濾轉換符RxJavaFilter
- 解剖 RxJava 之變換操作符RxJava
- RxJava 學習筆記 -- 變換操作符RxJava筆記
- RxJava2.0實用操作符總結及原理簡析RxJava
- RxJava 原始碼分析系列(四) -操作符變換原理RxJava原始碼
- Rxjava 2.x 原始碼系列 - 變換操作符 Map(上)RxJava原始碼
- RxJava操作符之轉換操作符(四)RxJava
- RxJava2.0(四)執行緒之間切換的內部原理RxJava執行緒
- OpenGL模型檢視變換、投影變換、視口變換模型
- javascript強制型別轉換與操作符JavaScript型別
- LINQ系列:Linq to Object轉換操作符Object
- Hough變換
- 傅立葉變換
- 仿射變換及其變換矩陣的理解矩陣
- 小波變換與傅立葉變換的區別
- 【DWT筆記】傅立葉變換與小波變換筆記
- OpenGL中的座標變換、矩陣變換矩陣
- 一元操作符“++”,“- ” 之強制轉換數值
- C++四種顯式型別轉換操作符C++型別
- 離散傅立葉變換(DFT)和快速傅立葉變換(FFT)FFT
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺
- RxSwift -- 變換Swift
- 快速傅立葉變換
- 【OpenCV】影像變換(四-2)霍夫變換圓檢測OpenCV
- 給初學者的RxJava2.0教程(三)RxJava
- 給初學者的RxJava2.0教程(七)RxJava
- 給初學者的 RxJava2.0 教程 (四)RxJava
- 給初學者的RxJava2.0教程(一)RxJava
- 給初學者的RxJava2.0教程(二)RxJava
- 給初學者的RxJava2.0教程(五)RxJava
- 給初學者的 RxJava2.0 教程 (八)RxJava
- 給初學者的RxJava2.0教程(四)RxJava
- 給初學者的RxJava2.0教程(八)RxJava
- 給初學者的RxJava2.0教程(九)RxJava
- 給初學者的 RxJava2.0 教程 (九)RxJava
- 灰度變換函式:對數及對比度拉伸變換函式
- 【OpenCV-Python】:影像的傅立葉變換與逆傅立葉變換OpenCVPython
- 【OpenCV】影像變換(四-1)-霍夫變換線段檢測OpenCV