RxJava 过滤操作符 skip,skipLast,task,takeLast
来源:互联网 发布:2017剑灵人男捏脸数据 编辑:程序博客网 时间:2024/06/14 04:04
skipe(n)操作符跳过源Obsrvable的前面n个数据项
Observable.range(1, 10).skip(5).subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { LogUtils.d("----->call():" + integer); } });
结果:
03-03 16:19:25.340 27107-27107/com.rxandroid.test1 D/----->: ----->call():6
03-03 16:19:25.340 27107-27107/com.rxandroid.test1 D/----->: ----->call():7
03-03 16:19:25.340 27107-27107/com.rxandroid.test1 D/----->: ----->call():8
03-03 16:19:25.340 27107-27107/com.rxandroid.test1 D/----->: ----->call():9
03-03 16:19:25.340 27107-27107/com.rxandroid.test1 D/----->: ----->call():10
skip(long time,TimeUnit) 是跳过多少秒 然后才开始将后面产生的数据提交给订阅者
Observable.interval(1, TimeUnit.SECONDS).sample(3, TimeUnit.SECONDS, Schedulers.newThread()).subscribe(new Observer<Long>() { @Override public void onCompleted() { LogUtils.d("-------->onCompleted()"); } @Override public void onError(Throwable e) { LogUtils.d("-------->onError()" + e); } @Override public void onNext(Long aLong) { LogUtils.d("-------->onNext()" + aLong + " thread:" + Thread.currentThread().getName()); } });结果:忽略了0,1
03-03 16:27:42.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():1 time:16:03:42
03-03 16:27:43.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():2 time:16:03:43
03-03 16:27:44.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():3 time:16:03:44
03-03 16:27:45.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():4 time:16:03:45
03-03 16:27:46.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():5 time:16:03:46
03-03 16:27:47.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():6 time:16:03:47
03-03 16:27:48.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():7 time:16:03:48
03-03 16:27:49.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():8 time:16:03:49
03-03 16:27:50.250 10652-11254/com.rxandroid.test1 D/----->: ----->call():9 time:16:03:50
skipLast 正好和skip 相反,忽略最后产生的n个数据项
Observable.range(1, 10).skipLast(5).subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { LogUtils.d("----->call():" + integer + " time:" + DateFormat.format("HH:MM:ss", System.currentTimeMillis())); } });
结果:
03-03 16:32:33.240 19805-19805/com.rxandroid.test1 D/----->: ----->call():1 time:16:03:33
03-03 16:32:33.250 19805-19805/com.rxandroid.test1 D/----->: ----->call():2 time:16:03:33
03-03 16:32:33.250 19805-19805/com.rxandroid.test1 D/----->: ----->call():3 time:16:03:33
03-03 16:32:33.250 19805-19805/com.rxandroid.test1 D/----->: ----->call():4 time:16:03:33
03-03 16:32:33.250 19805-19805/com.rxandroid.test1 D/----->: ----->call():5 time:16:03:33
skipLast(long time,TimeUnit) 忽略最后时间单位内产生的数据
例子:
Observable.interval(1, TimeUnit.SECONDS).take(10).skipLast(5, TimeUnit.SECONDS).subscribe(new Action1<Long>() { @Override public void call(Long integer) { LogUtils.d("----->call():" + integer + " time:" + DateFormat.format("HH:MM:ss", System.currentTimeMillis())); } });
03-03 16:34:50.860 23169-24170/com.rxandroid.test1 D/----->: ----->call():0 time:16:03:50
03-03 16:34:50.860 23169-24170/com.rxandroid.test1 D/----->: ----->call():1 time:16:03:50
03-03 16:34:52.860 23169-24170/com.rxandroid.test1 D/----->: ----->call():2 time:16:03:52
03-03 16:34:53.860 23169-24170/com.rxandroid.test1 D/----->: ----->call():3 time:16:03:53
03-03 16:34:53.860 23169-24170/com.rxandroid.test1 D/----->: ----->call():4 time:16:03:53
关于take的操作符,想必通过前面的文章,您应该很熟悉,这里还是回顾一下吧
take(n) 并不是娶第n个,而是取前面n个数据
例子:
Observable.range(1,10).take(5).subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { LogUtils.d("-------->onNext()" + integer); } });结果:
03-03 16:41:10.790 3005-3005/com.rxandroid.test1 D/----->: -------->onNext()1
03-03 16:41:10.790 3005-3005/com.rxandroid.test1 D/----->: -------->onNext()2
03-03 16:41:10.790 3005-3005/com.rxandroid.test1 D/----->: -------->onNext()3
03-03 16:41:10.790 3005-3005/com.rxandroid.test1 D/----->: -------->onNext()4
03-03 16:41:10.800 3005-3005/com.rxandroid.test1 D/----->: -------->onNext()5
关于 take(longtime, TimeUnit unit) 是在制定时间内取数据,如果超过了这个时间源Observable产生的数据将作废,例子就不演示了
takeFirst操作符和first操作符类似,取满足条件的第一个
区别:
1:first 娶不到要抛异常,takeFirst不会
Observable.range(1, 10).takeFirst(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { return integer > 10; } }).subscribe(new Observer<Integer>() { @Override public void onCompleted() { LogUtils.d("------>takeFirst onCompleted"); } @Override public void onError(Throwable e) { LogUtils.d("------>takeFirst onError:" + e); } @Override public void onNext(Integer integer) { LogUtils.d("------>takeFirst onNext:" + integer); } }); Observable.range(10, 10).first(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { return integer > 20; } }).subscribe(new Observer<Integer>() { @Override public void onCompleted() { LogUtils.d("------>first onCompleted"); } @Override public void onError(Throwable e) { LogUtils.d("------>first onError:" + e); } @Override public void onNext(Integer integer) { LogUtils.d("------>first onNext:" + integer); } });
结果:
03-03 16:50:52.410 21900-21900/com.rxandroid.test1 D/----->: ------>takeFirst onCompleted
03-03 16:50:52.410 21900-21900/com.rxandroid.test1 D/----->: ------>first onError:java.util.NoSuchElementException: Sequence contains no elements
takeLast操作符与last操作符相似,区别在于,如果娶不到满足条件的值,last将抛出异常,这里就不演示了
- RxJava 过滤操作符 skip,skipLast,task,takeLast
- RX操作符之过滤操作一(debounce、filter、ofType、takeLast、last、lastOrDefault、takeLastBuffer、skip、skipLast、take)
- Rxjava(过滤类)-skipLast
- Rxjava(过滤类)-Skip
- RxJava-过滤操作符
- RxJava过滤操作符
- Rxjava 过滤操作符
- RxJava过滤操作符 filter
- RxJava过滤操作符 debounce
- RxJava 过滤操作符 ofType
- RxJava 过滤操作符 ignoreElements
- RxJava 过滤操作符 sample
- RxJava之过滤操作符
- RxJava操作符(3)-过滤
- RxJava过滤操作符实例
- RxJava—过滤操作符
- RxJava----操作符:过滤操作符
- RxJava操作符(04-过滤操作)
- Android高级知识—思维导图
- Xcode-快捷键
- 常规阻抗控制只能是10%的偏差(二)
- 选择排序法
- SpringMVC与Struts2的比较
- RxJava 过滤操作符 skip,skipLast,task,takeLast
- Handler的简单实用和介绍
- 使用FreeImage来进行Qt图片的读入
- java String.split 传入参数为正则表达式
- 网页布局基础浅谈
- 新页面的的建立
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- 计算机视觉:让冰冷的机器看懂多彩的世界
- 给虚拟表添加id(给视图加个id)