抑制Observable发射的前N项数据,使用 Skip 操作符,你可以忽略Observable'发射的前N项数据,只保留之后的数据。
demo:
Observable.range(1, 10).skip(2).subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
System.out.println(integer);
}
});
输出:
3
4
5
6
7
8
9
10
看下skip
public final Observable<T> skip(int count) {
return lift(new OperatorSkip<T>(count));
}
这里传递的operator是OperatorSkip
public final class OperatorSkip<T> implements Observable.Operator<T, T> {
final int toSkip;
public OperatorSkip(int n) {
if (n < 0) {
throw new IllegalArgumentException("n >= 0 required but it was " + n);
}
this.toSkip = n;
}
@Override
public Subscriber<? super T> call(final Subscriber<? super T> child) {
return new Subscriber<T>(child) {
int skipped;
@Override
public void onCompleted() {
child.onCompleted();
}
@Override
public void onError(Throwable e) {
child.onError(e);
}
@Override
public void onNext(T t) {
if (skipped >= toSkip) {
child.onNext(t);
} else {
skipped += 1;
}
}
@Override
public void setProducer(final Producer producer) {
child.setProducer(producer);
producer.request(toSkip);
}
};
}
}
可以看到它的onNext在前面几项的时候会忽略。