RxJava 过滤操作符 throttleFirst 与 throttleLast 以及 sample
生活随笔
收集整理的这篇文章主要介绍了
RxJava 过滤操作符 throttleFirst 与 throttleLast 以及 sample
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
看文档发现 throttleFirst 与 throttleLast 以及 Sample 都跳到同一个界面Sample
throttleFirst :在某段时间内,只发送该段时间内第1次事件(假如一个按钮1秒内点了3次 ,第一次显示,后2次不显示)
throttleLast: 在某段时间内,只发送该段时间内最后1次事件(假如一个按钮1秒内点了3次 ,最后第一次显示,前两次不显示)
Sample: 在某段时间内,只发送该段时间内最后1次事件 与 throttleLast 类似
看下代码
1 throttleFirst
测试为1秒内发送次数
Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws Throwable {emitter.onNext(1);//第一次发送Thread.sleep(500);emitter.onNext(2);//时间没有超过1s 不发送Thread.sleep(500);emitter.onNext(3); //时间为500+500 为1 s 发送Thread.sleep(500);emitter.onNext(4); //时间没有超过1s 不发送Thread.sleep(1500);emitter.onNext(5); //时间超过1 s 发送Thread.sleep(500);emitter.onNext(6);//时间没有超过1s 不发送Thread.sleep(500);emitter.onNext(7);//时间超过1 s 发送}}).throttleFirst(1000,TimeUnit.MILLISECONDS).subscribe(new Consumer<Integer>() {@Overridepublic void accept(Integer integer) throws Throwable {Log.e("--------rxjava",integer.toString());}});
打印结果为
2throttleLast 测试为1秒内最后一次发送
Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws Throwable {emitter.onNext(1);//第一次不发送Thread.sleep(400);emitter.onNext(2);Thread.sleep(400);emitter.onNext(3);Thread.sleep(900);emitter.onNext(4);Thread.sleep(400);emitter.onNext(5);Thread.sleep(700);emitter.onNext(6);Thread.sleep(900);emitter.onNext(7);}}).throttleLast(1000,TimeUnit.MILLISECONDS).subscribe(new Consumer<Integer>() {@Overridepublic void accept(Integer integer) throws Throwable {Log.e("--------rxjava",integer.toString());}});}
打印结果
3 Sample
Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws Throwable {emitter.onNext(1);//第一次不发送Thread.sleep(400);emitter.onNext(2);Thread.sleep(400);emitter.onNext(3);Thread.sleep(900);emitter.onNext(4);Thread.sleep(400);emitter.onNext(5);Thread.sleep(700);emitter.onNext(6);Thread.sleep(900);emitter.onNext(7);}}).sample(1000,TimeUnit.MILLISECONDS).subscribe(new Consumer<Integer>() {@Overridepublic void accept(Integer integer) throws Throwable {Log.e("--------rxjava",integer.toString());}});}
打印结果
Sample 与 throttleLast 是一样的效果....
总结
以上是生活随笔为你收集整理的RxJava 过滤操作符 throttleFirst 与 throttleLast 以及 sample的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 求一个带平字的微信网名
- 下一篇: RxJava firstElement