您的位置:首页 > 编程语言 > Java开发

Rxjava(过滤类)-Skip

2016-10-31 17:25 204 查看
抑制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在前面几项的时候会忽略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: