系列文章
RxJava系列之簡介和觀察者設計模式
RxJava系列之上游與下游
RxJava系列之常用創建型操作符
RxJava系列之常用變換操作符
RxJava系列之常用過濾操作符
RxJava系列之常用條件操作符
RxJava系列之常用合併操作符
RxJava系列之常用異常操作符
RxJava系列之線程切換實戰
RxJava系列之背壓模式
RxJava系列之配合Retrofit
RxJava系列之泛型高級
RxJava系列之手寫create操作符
RxJava系列之手寫create操作符增加泛型限定
RxJava系列之手寫just操作符
RxJava系列之手寫map操作符
RxJava系列之手寫切換線程
條件操作符
將上游發射的數據進行判斷,下游的接收都是Boolean的。滿足條件,下游接收到true,不滿足條件,下游接收到false。
all
所有數據都滿足條件,下游就接收到true,其中有一個不滿足條件,就接收到false。
/**
* all,如同 if 那樣的功能 :全部爲true,纔是true,只要有一個爲false,就是false
* @param view
*/
public void r01(View view) {
String v1 = "1";
String v2 = "2";
String v3 = "3";
String v4 = "cc";
// 需求:只要有一個爲 cc的,就是false
// 平常的寫法
// if (v1.equals("cc") || v2.equals("cc") || v3.equals("cc") || v4.equals("cc")) {
if (v1 == null) {
Log.d(TAG, "r01: " + false);
} else {
Log.d(TAG, "r01: " + true);
}
// RxJava的寫法
// 上游
Observable.just(v1, v2, v3, v4) // RxJava 2.X 之後 不能傳遞null,否則會報錯
.all(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
return !s.equals("cc"); // 如果s不等於cc,就是true
}
})
.subscribe(new Consumer<Boolean>() { // 下游
@Override
public void accept(Boolean s) throws Exception {
Log.d(TAG, "accept: " + s);
}
});
}
contains
包含某條數據,下游就接收到true,所有數據都不包含,則下游接收到false
/**
* contains 是否包含
* @param view
*/
public void r02(View view) {
Observable.just("JavaSE", "JavaEE", "JavaME", "Android", "iOS", "Rect.js", "NDK")
.contains("C") // 是否包含了 Android,條件是否滿足
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean s) throws Exception {
Log.d(TAG, "accept: " + s);
}
});
}
any
any和all是相反的。any是全部爲false,下游接收到false,有一個是true,下游接收到就是true
/**
* Any 和 All相反的,All全部爲true,纔是true,只要有一個爲false,就是false
* any 全部爲 false,纔是false, 只要有一個爲true,就是true
* @param view
*/
public void r03(View view) {
Observable.just("JavaSE", "JavaEE", "JavaME", "Android", "iOS", "Rect.js", "NDK")
.any(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
return s.equals("Android");
}
}) // 是否包含了 Android,條件是否滿足
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean s) throws Exception {
Log.d(TAG, "accept: " + s);
}
});
}
總結
上游 -------> 條件操作(往右邊流向的時候,條件判斷) ----------> 下游
All: 如同 if 那樣的功能 :全部爲true,纔是true,只要有一個爲false,就是false.
contains 是否包含
any 全部爲 false,纔是false, 只要有一個爲true,就是true
如果使用了條件操作符,下一層,接收的類型 就是條件類型(Boolean)