作用
通过设置函数,判断被观察者(Observable)发送的事件是否符合条件
类型
| 类型 | 作用 | 备注 |
|---|---|---|
| all() | 判断发送的数据是否全部都满足函数条件 | 返回Single,满足则返回true |
| takeWhile() | 开始满足函数条件才发射数据,直到不满足则停止发射 | 后续无论是否满足条件都不再发射 |
| takeUntil() | 直到满足函数条件就停止发射 | 后续无论是否满足条件都不再发射 |
| skipWhile() | 不满足函数条件就发射数据 | 后续所有的数据发射出来 |
| skipUntil() | 直到第二个Observable发射数据第一个Observable才会发射,之前的会丢弃掉 | 参数是Observable不是Predicate |
| SequenceEqual() | 判定两个Observables需要发送的数据是否相同 | 相同则返回true |
| contains() | 判断发送的数据中是否包含指定数据 | 包含则返回true |
| isEmpty() | 判断发送的数据是否为空 | 空则返回true |
| amb() | 当需要发送多个Observable时,只发送先发送数据的Observable的数据,而其余Observable则被丢弃 | |
| defaultIfEmpty() | 正常发送Next事件;或者不发送任何有效Next事件、仅发送了Complete事件,则发送一个默认值 |
ofType():只发射指定类型的事件
Observable.just(1, "2")
.all(new Predicate<Serializable>() {
@Override
public boolean test(Serializable serializable) throws Exception {
return serializable instanceof String;
}
})
.subscribe(new SingleObserver<Boolean>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "函数条件 onSubscribe");
}
@Override
public void onSuccess(Boolean aBoolean) {
Log.d(TAG, "函数条件:" + aBoolean);
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "函数条件 onError");
}
});
>>>>>>
函数条件 onSubscribe
函数条件:false
>>>>>>
takeWhile():开始满足函数条件才发射数据,直到不满足则停止发射,后续无论是否满足条件都不再发射
Observable.just(1, 2, 3, 1, 2, 3)
.takeWhile(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return integer > 2;
}
})
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "满足函数条件的数据:" + integer);
}
});
>>>>>>
>>>>>>
takeUntil():直到满足函数条件就停止发射,后续无论是否满足条件都不再发射
Observable.just(1, 2, 3, 1, 2, 3)
.takeUntil(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return integer > 2;
}
})
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "满足函数条件的数据:" + integer);
}
});
>>>>>>
满足函数条件的数据:1
满足函数条件的数据:2
满足函数条件的数据:3
>>>>>>
skipWhile():丢弃发射的数据直到不满足函数条件才开始发射,后续所有的数据发射出来
Observable.just(1, 2, 3, 1, 2, 3)
.skipWhile(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return integer != 3;
}
})
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "满足函数条件的数据:" + integer);
}
});
>>>>>>
满足函数条件的数据:3
满足函数条件的数据:1
满足函数条件的数据:2
满足函数条件的数据:3
>>>>>>
skipUntil():直到第二个Observable发射数据第一个Observable才会发射,之前的会丢弃掉
Observable.just(1, 2, 3, 1, 2, 3)
.skipUntil(new ObservableSource<Object>() {
@Override
public void subscribe(Observer<? super Object> observer) {
Observable.timer(1, TimeUnit.SECONDS).subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.d(TAG, "延迟一秒发射");
}
});
}
})
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "满足函数条件的数据:" + integer);
}
});
>>>>>>
延迟一秒发射
>>>>>>
sequenceEqual():判定两个Observables需要发送的数据是否相同
Observable.sequenceEqual(Observable.just(1), Observable.just(1))
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
Log.d(TAG, "是否满足条件:" + aBoolean);
}
});
>>>>>>
是否满足条件:true
>>>>>>
contains():判断发送的数据中是否包含指定数据
Observable.just(1, 2, 3, 1, 2, 3)
.contains(1)
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
Log.d(TAG, "是否满足条件:" + aBoolean);
}
});
>>>>>>
是否满足条件:true
>>>>>>
isEmpty():判断发送的数据是否为空
Observable.empty()
.isEmpty()
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
Log.d(TAG, "是否满足条件:" + aBoolean);
}
});
>>>>>>
是否满足条件:true
>>>>>>
defaultIfEmpty():如果发送的数据为空,则发射一个默认值
Observable.empty()
.defaultIfEmpty(99)
.subscribe(new Consumer<Object>() {
@Override
public void accept(Object object) throws Exception {
Log.d(TAG, "满足函数条件的数据:" + object);
}
});
>>>>>>
满足函数条件的数据:99
>>>>>>