系列文章
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)