RxJava 2.x 之條件操作符
阿新 • • 發佈:2018-11-01
條件操作符
- all操作符
- ambArray操作符
- contains操作符
- any操作符
- isEmpty操作符
- defaultIfEmpty操作符
- switchIfEmpty操作符
- sequenceEqual操作符
- takeUntil操作符
- takeWhile操作符
- skipUntil操作符
- skipWhile操作符
all
all操作符主要用來判斷所有元素是否滿足某個條件
Observable.just(0, 1, 2, 3, 4, 5)
.all(new Predicate <Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
//判斷是否所有元素都大於等於0
return integer >= 0;
}
})
.subscribe(new CommonComsumer<>());
輸出:
accept true
Process finished with exit code 0
ambArray
ambArray操作符可以從多個被觀察者中選擇第一個發射元素的被觀察者進行處理,其他被觀察者則拋棄
Observable.ambArray(
Observable.timer(1, TimeUnit.SECONDS),
//僅處理第一個發射元素的被觀察者
Observable.just(3, 4, 5))
.subscribe(new CommonComsumer<>());
輸出:
accept 3
accept 4
accept 5
Process finished with exit code 0
contains
contains操作符判斷資料來源中是否包含某個元素
Observable.just(1, 2, 3)
.contains(2)
.subscribe(new CommonComsumer<>());
輸出:
accept true
Process finished with exit code 0
any
contains操作符內部實際上呼叫的是any操作符
Observable.just(0, 1, 2, 3, 4, 5)
.any(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
//判斷是否有元素等於0
return integer == 3;
}
})
.subscribe(new CommonComsumer<>());
輸出:
accept true
Process finished with exit code 0
isEmpty
isEmpty操作符主要用來判斷被觀察者是否發射過元素,內部呼叫的all操作符
Observable.just(0, 1, 2, 3, 4, 5)
.isEmpty()
.subscribe(new CommonComsumer<>());
輸出:
accept false
Process finished with exit code 0
defaultIfEmpty
defaultIfEmpty操作符主要用於被觀察者不發鬆資料的時候傳送一個預設元素
Observable.empty()
.defaultIfEmpty(10)
.subscribe(new CommonComsumer<>());
輸出:
accept 10
Process finished with exit code 0
switchIfEmpty
switchIfEmpty操作符主要用於被觀察者不傳送資料的時候傳送多個預設資料
Observable.empty()
.switchIfEmpty(Observable.just(1, 2, 3))
.subscribe(new CommonComsumer<>());
輸出:
accept 1
accept 2
accept 3
Process finished with exit code 0
sequenceEqual
sequenceEqual操作符主要用於對比兩個被觀察者傳送的元素佇列,它只關心兩個傳送佇列的元素,元素髮射順序和最終狀態
Observable.sequenceEqual(
Observable.just(0L, 1L, 2L),
Observable.intervalRange(0, 3, 0, 1, TimeUnit.SECONDS))
.subscribe(new CommonComsumer<>());
輸出:
accept true
Process finished with exit code 0
takeUntil
takeUntil操作符主要用來達到某個條件就停止
Observable.just(0, 1, 2, 3, 4, 5, 6, 7)
//當元素大於2時停止
.takeUntil(integer -> integer == 2)
.subscribe(new CommonComsumer<>());
輸出:
accept 0
accept 1
accept 2
Process finished with exit code 0
takeWhile
takeWhile操作符判斷條件為true才執行被觀察者的事件
Observable.just(0, 1, 2, 3, 4, 5, 6, 7)
.takeWhile(integer -> integer != 5)
.subscribe(new CommonComsumer<>());
輸出:
accept 0
accept 1
accept 2
accept 3
accept 4
Process finished with exit code 0
skipUntil
skipUntil操作符主要用來接收一個被觀察者直到被觀察者傳送事件之前,第一個被觀察者所有傳送的元素都會被拋棄
Observable.intervalRange(0, 10, 0, 1, TimeUnit.SECONDS)
.skipUntil(Observable.timer(3, TimeUnit.SECONDS))
.subscribe(new CommonComsumer<>());
前三秒傳送的資料都被拋棄
輸出:
accept 3
accept 4
accept 5
accept 6
accept 7
accept 8
accept 9
Process finished with exit code 0
skipWhile
skipWhile操作符主要用來跳過開始的一段資料
Observable.intervalRange(0, 10, 0, 1, TimeUnit.SECONDS)
//跳過開始一段資料
.skipWhile(value -> value < 5)
.subscribe(new CommonComsumer<>());
輸出:
accept 5
accept 6
accept 7
accept 8
accept 9
Process finished with exit code 0
複習文件
https://github.com/byhook/rxjava2-study
參考:
https://maxwell-nc.github.io/android/rxjava2-5.html