java skip函数_Rxjava skip

Observable.just(1, 2, 3, 4).skip(1).subscribe(System.out::println);

输出2,3,4

skip操作符的含义就是跳过指定数量的事件,忽略前面的事件,看看源码里是怎么写的吧

public final Observable skip(long count) {

if (count <= 0) {

return RxJavaPlugins.onAssembly(this);

}

return RxJavaPlugins.onAssembly(new ObservableSkip(this, count));

}

追踪到ObservableSkip类里看看

public final class ObservableSkip extends AbstractObservableWithUpstream {

final long n;

public ObservableSkip(ObservableSource source, long n) {

super(source);

this.n = n;

}

@Override

public void subscribeActual(Observer super T> observer) {

source.subscribe(new SkipObserver(observer, n));

}

...

当我们调用subscribe时,就会触发subscribeActual函数的调用

这里的source就是我们代码里Observable.just(1, 2, 3, 4)返回的ObservableFromArray对象,看的出,实际上就是在中间又加了一个观察者(SkipObserver),当ObservableFromArray对象调用subscribe时,就会触发SkipObserver对象的onSubscribe方法,在这个方法里this.upstream就是FromArrayDisposable对象,先别管这个是什么,主要看事件流是怎么发送到观察者的。

public void onSubscribe(Disposable d) {

if (DisposableHelper.validate(this.upstream, d)) {

this.upstream = d;

downstream.onSubscribe(this);

}

}

好了,开始发送事件onNext,是谁在发送事件?,其实就是一直都是观察者在发送,因为这里有个SkipObserver,事件先由它发出来,经过onNext,

属性remaining表示还需要逃过多少事件,一直到remaining为0,事件就会交给下游downstream处理。

@Override

public void onNext(T t) {

if (remaining != 0L) {

remaining--;

} else {

downstream.onNext(t);

}

}

基于源码2.2.4版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值