filter的作用就是过滤出指定的数据
例子中我们只要数据大于4的数据。
Observable.just(1, 2, 3, 4, 5).filter(new Predicate<Integer>() {
@Override
public boolean test(@NotNull Integer integer) throws Exception {
return integer > 4;
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println(integer);
}
});
public final Observable<T> filter(Predicate<? super T> predicate) {
ObjectHelper.requireNonNull(predicate, "predicate is null");
return RxJavaPlugins.onAssembly(new ObservableFilter<T>(this, predicate));
}
public final class ObservableFilter<T> extends AbstractObservableWithUpstream<T, T> {
final Predicate<? super T> predicate;
public ObservableFilter(ObservableSource<T> source, Predicate<? super T> predicate) {
super(source);
this.predicate = predicate;
}
@Override
public void subscribeActual(Observer<? super T> observer) {
source.subscribe(new FilterObserver<T>(observer, predicate));
}
static final class FilterObserver<T> extends BasicFuseableObserver<T, T> {
final Predicate<? super T> filter;
FilterObserver(Observer<? super T> actual, Predicate<? super T> filter) {
super(actual);
this.filter = filter;
}
@Override
public void onNext(T t) {
if (sourceMode == NONE) {
boolean b;
try {
//测试通过
b = filter.test(t);
} catch (Throwable e) {
fail(e);
return;
}
if (b) {
//测试通过的数据可以发出
downstream.onNext(t);
}
} else {
downstream.onNext(null);
}
}
...
}
}