评估Observables发出的一个或多个Observable或项目的运算符。
确定Observable发出的所有项目是否符合某些标准。
当且仅当源Observable正常终止并且源Observable发出的每个项根据都test计算为true时才返回true; 如果源Observable发出的任何项test计算为false,则返回false。
举个例子:
private void doSomeWork() {
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> observableEmitter) throws Exception {
observableEmitter.onNext(0);
observableEmitter.onNext(1);
// observableEmitter.onError(new Throwable("Error"));
observableEmitter.onNext(2);
observableEmitter.onComplete();
}
}).all(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return integer <= 3;
}
}).subscribe(new SingleObserver<Boolean>() {
@Override
public void onSubscribe(Disposable disposable) {
}
@Override
public void onSuccess(Boolean aBoolean) {
Log.d(TAG, " onSuccess : aBoolean : " + aBoolean);
}
@Override
public void onError(Throwable throwable) {
Log.d(TAG, " onError : " + throwable.getMessage());
}
});
}
由于发射的所有数据都小于等于3,所以打印结果
onSuccess : aBoolean : true
需要注意的是All运算符,只有在源Observable正常终止才能返回Boolean,所以如果将上方例子中此段代码取消注释
observableEmitter.onError(new Throwable("Error"));
打印结果
onError : Error
确定Observable是否发出特定项目。
给Contains运算符传递特定项,如果源Observable发出该项,则它返回的Observable将发出true,如果源Observable终止而不发出该项,则返回false。
Contains运算符通过判断源发出的项是否有与特定的项equal的,来返回true和false。
举个例子:
public class Name {
String name = "";
public Name(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
return (obj instanceof Name && name.equalsIgnoreCase(((Name) obj).name));
}
}
private void doSomeWork() {
Observable.just(new Name("张三"), new Name("李四"))
.contains(new Name("张三"))
.subscribe(new SingleObserver<Boolean>() {
@Override
public void onSubscribe(Disposable disposable) {
}
@Override
public void onSuccess(Boolean aBoolean) {
Log.d(TAG, " onSuccess : aBoolean : " + aBoolean);
}
@Override
public void onError(Throwable throwable) {
Log.d(TAG, " onError : " + throwable.getMessage());
}
});
}
由于重写Name的equals方法,所以contains实际是判断源发射的Name对象的name是否是张三,打印结果:
onSuccess : aBoolean : true
将上面示例代码注释掉这里再次执行
// @Override
// public boolean equals(Object obj) {
// return (obj instanceof Name && name.equalsIgnoreCase(((Name) obj).name));
// }
因为没有重写equals,所以contains比较的是两个对象,打印结果:
onSuccess : aBoolean : false
从源Observable发出项,如果源Observable没有发出任何内容,则发出默认项。
如果源Observable发出任何项,则DefaultIfEmpty运算符只是精确镜像源Observable。 如果源Observable正常终止(使用onComplete)而没有发出任何项,则从DefaultIfEmpty返回的Observable将在它完成之前发出您选择的默认项。
这个操作符很好理解,如果正常发射的数据个数为0,则发射个默认的项。
举个例子:
private void doSomeWork() {
Observable.fromIterable(new ArrayList<String>())
.defaultIfEmpty("default")
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d(TAG, " accept : s : " + s);
}
});
}
打印结果
accept : s : default
确定两个Observable是否发出相同的项目序列。
sequenceEqual操作符接受传递两个Observable参数,它会顺序比较两个Observable发射的数据,如果发射数据的序列是相同的(相同的数据,相同的顺序,相同的终止状态),则返回true,否则返回false。
最近两年比较懒,这篇文章还是去年年初缓存的草稿,也懒得再详细改了,就现在发出来算了.
参考资料,参考但不局限以下链接
http://reactivex.io/documentation/operators.html#transforming
https://blog.csdn.net/IO_Field/article/details/52452111