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在前面几项的时候会忽略。
操作符,你可以忽略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在前面几项的时候会忽略。
相关文章推荐
- Android函数响应式编程——必学的RxJava过滤操作符filter、elementAt、distinct、skip、take、ignoreElements、throttleFirst
- RxJava 过滤操作符 skip,skipLast,task,takeLast
- RxJava【过滤】操作符 filter distinct throttle take skip first
- RxJava 过滤操作符 distinct和elementAt
- 深入浅出RxJava_04[数据传输过滤操作]
- RxJava2 / RxAndroid2操作符skip
- RxJava操作符(04-过滤操作)
- RxJava操作符总结之过滤
- RxJava进阶三(过滤类操作符)
- Rxjava(过滤类)-skipLast
- RxJava(二:Observable 创建,组合与过滤)
- RxJava 过滤操作符 ofType
- RxJava2 / RxAndroid2操作符skip
- Rxjava(过滤类)-take
- [置顶] RxJava使用小总结:Observable的创建方式、过滤Observable
- RxJava 过滤操作符 first last single
- Rxjava(过滤类)-ElementAt
- RxJava2 / RxAndroid2操作符skip
- Rxjava学习之过滤操作符 — distinct
- RxJava之过滤操作符