欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 人文社科 > 生活经验 >内容正文

生活经验

RxJava 过滤操作符 throttleFirst 与 throttleLast 以及 sample

发布时间:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。