RxJava转换操作符window

时间:2021-09-13 17:48:42

window操作符会在时间间隔内缓存结果,类似于buffer缓存一个list集合,区别在于window将这个结果集合封装成了observable


window(long timespan, TimeUnit unit)
第一个是缓存的间隔时间,第二个参数是时间单位


RxJava转换操作符window


Observable.interval(1,TimeUnit.SECONDS).take(10).window(3,TimeUnit.SECONDS).subscribe(new Observer<Observable<Long>>() {
@Override
public void onCompleted() {
LogUtils.d("------>onCompleted()");
}

@Override
public void onError(Throwable e) {
LogUtils.d("------>onError()" + e);
}

@Override
public void onNext(Observable<Long> integerObservable) {
LogUtils.d("------->onNext()");
integerObservable.subscribe(new Action1<Long>() {
@Override
public void call(Long integer) {
LogUtils.d("------>call():" + integer);
}
});
}
});


结果:

02-27 11:26:38.750 5279-5539/com.rxandroid.test1 D/----->: ------->onNext()
02-27 11:26:39.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():0
02-27 11:26:40.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():1
02-27 11:26:41.760 5279-5539/com.rxandroid.test1 D/----->: ------->onNext()
02-27 11:26:41.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():2
02-27 11:26:42.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():3
02-27 11:26:43.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():4
02-27 11:26:44.760 5279-5539/com.rxandroid.test1 D/----->: ------->onNext()
02-27 11:26:44.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():5
02-27 11:26:45.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():6
02-27 11:26:46.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():7
02-27 11:26:47.760 5279-5539/com.rxandroid.test1 D/----->: ------->onNext()
02-27 11:26:47.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():8
02-27 11:26:48.760 5279-5539/com.rxandroid.test1 D/----->: ------>call():9
02-27 11:26:48.760 5279-5539/com.rxandroid.test1 D/----->: ------>onCompleted()