1. 程式人生 > >RxJava 2.x 之條件操作符

RxJava 2.x 之條件操作符

條件操作符

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