filter
| 过滤不满足条件的事件,例如以下代码,只会输出值为6的事件 |
PublishSubject<String> subject = PublishSubject.create();
Disposable disposable = subject
.compose(new ObservableTransformer<String, String>() {
@Override
public ObservableSource<String> apply(Observable<String> upstream) {
//替换部分
return upstream.filter(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
LogUtils.e("ObservableTransformer==" + s);
return Integer.valueOf(s) == 6;
}
});
//替换部分
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
LogUtils.e("disposable1==" + s);
}
});
subject.onNext("1");
subject.onNext("2");
subject.onNext("3");
subject.onNext("4");
subject.onNext("5");
subject.onNext("6");
subject.onNext("7");
subject.onNext("8");
subject.onNext("9");
subject.onNext("10");
subject.onComplete();
takeUntil
| 先发送事件,再判断是否符合条件,当符合条件的时候,终止。如下代码。会输出事件 1,2,3,4,5,6 |
//替换第一部分代码
return upstream.takeUntil(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
LogUtils.e("ObservableTransformer==" + s);
return Integer.valueOf(s) == 6;
}
});
takeWhile
| 先判断是否符合条件,再发送事件。当不符合条件的时候,直接终止。如下代码。。 |
//替换第一部分代码
return upstream.takeWhile(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
LogUtils.e("ObservableTransformer==" + s);
return Integer.valueOf(s) == 6;
}
});
| 什么也不会输出。因为当事件1来临时,不等于6,直接终止 |
return Integer.valueOf(s) != 6;
| 则会输出事件1,2,3,4,5,事件6不符合条件,终止。 |