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事件作出響應");
}
});
相關文章
- 解剖 RxJava 之變換操作符RxJava
- RxJava 學習筆記 -- 變換操作符RxJava筆記
- RxJava 原始碼分析系列(四) -操作符變換原理RxJava原始碼
- Rxjava 2.x 原始碼系列 - 變換操作符 Map(上)RxJava原始碼
- RxJava2.0(四)執行緒之間切換的內部原理RxJava執行緒
- javascript強制型別轉換與操作符JavaScript型別
- C++四種顯式型別轉換操作符C++型別
- 一元操作符“++”,“- ” 之強制轉換數值
- z 變換
- Hough變換
- 仿射變換及其變換矩陣的理解矩陣
- 給初學者的RxJava2.0教程(三)RxJava
- 給初學者的RxJava2.0教程(七)RxJava
- 給初學者的 RxJava2.0 教程 (四)RxJava
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺
- Z變換(2020.10.21)
- 頻域變換
- 選擇is或者as操作符而不是做強制型別轉換型別
- 小波變換與傅立葉變換的區別
- RxJava操作符之組合操作符(六)RxJava
- ? 圖解 == 操作符規則和不同型別間轉換規則圖解型別
- 灰度變換函式:對數及對比度拉伸變換函式
- 2D變換
- 貝葉斯變換
- NOIP 2002 字串變換字串
- pose座標變換
- 傅立葉變換
- 各種Fourier變換
- dart基礎之變數資料型別操作符方法異常Dart變數資料型別
- JavaScript in 操作符JavaScript
- 複變函式與積分變換函式
- 離散傅立葉變換(DFT)和快速傅立葉變換(FFT)FFT
- OpenGL 使用矩陣變換改變檢視矩陣
- iOS 仿射變換(CGAffineTransform)iOSORM
- SVG animateTransform變換動畫SVGORM動畫
- 快速傅立葉變換
- css32d變換CSSS3
- 變數型別轉換變數型別