RxJava操作符(08-条件和布尔操作)
2016-06-14 14:59
561 查看
转载请标明出处:
http://blog.csdn.net/xmxkf/article/details/51671826
本文出自:【openXu的博客】
目录:
All
Amb
Contains
DefaultIfEmpty
SequenceEqual
SkipUntil
SkipWhile
TakeUntil
TakeWhile
源码下载
示例代码:
输出:
1
2
3
onNext:false
onCompleted
有一个类似的对象方法ambWith。Observable.amb(o1,o2)和o1.ambWith(o2)是等价的。
示例代码:
输出:
onNext:4
onNext:5
onNext:6
onCompleted
示例代码:
输出:
contains(4):true
isEmpty():false
exists():true
示例代码:
输出:
defaultIfEmpty():10
示例代码:
输出:
sequenceEqual:true
示例代码:
输出:
skipUntil:3
skipUntil:4
skipUntil:5
示例代码:
输出:
SkipWhile:3
SkipWhile:4
SkipWhile:5
示例代码:
输出:
TakeUntil:0
TakeUntil:1
示例代码:
输出:
TakeWhile:0
TakeWhile:1
TakeWhile:2
http://blog.csdn.net/xmxkf/article/details/51671826
本文出自:【openXu的博客】
目录:
All
Amb
Contains
DefaultIfEmpty
SequenceEqual
SkipUntil
SkipWhile
TakeUntil
TakeWhile
源码下载
1. All
判定是否Observable发射的所有数据都满足某个条件。 传递一个谓词函数给All操作符,这个函数接受原始Observable发射的数据,根据计算返回一个布尔值。All返回一个只发射一个单个布尔值的Observable,如果原始Observable正常终止并且每一项数据都满足条件,就返回true;如果原始Observable的任何一项数据不满足条件就返回False。示例代码:
Observable.just(1,2,3,4) .all(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { Log.v(TAG, ""+integer); return integer<3; //判断是不是发射的所有数据都小于3 } }).subscribe(new Subscriber<Boolean>() { @Override public void onCompleted() { Log.v(TAG, "onCompleted"); } @Override public void onError(Throwable e) { Log.v(TAG, "onError:"+e.getMessage()); } @Override public void onNext(Boolean aBoolean) { Log.v(TAG, "onNext:"+aBoolean); } });
输出:
1
2
3
onNext:false
onCompleted
2. Amb
传递两个或多个Observable给Amb时,它只发射其中首先发射数据或通知(onError或onCompleted)的那个Observable的所有数据,而其他所有的Observable的发射物将被丢弃。有一个类似的对象方法ambWith。Observable.amb(o1,o2)和o1.ambWith(o2)是等价的。
示例代码:
Observable.amb( //第一个Observable延迟1秒发射数据 Observable.just(1,2,3).delay(1,TimeUnit.SECONDS), Observable.just(4,5,6)) .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { Log.v(TAG, "onCompleted"); } @Override public void onError(Throwable e) { Log.v(TAG, "onError:"+e.getMessage()); } @Override public void onNext(Integer integer) { Log.v(TAG, "onNext:"+integer); } });
输出:
onNext:4
onNext:5
onNext:6
onCompleted
3. Contains
Contains:判断一个Observable发射的所有数据中,是否包含一个特定的值。给Contains传一个特定的值,如果原始Observable发射了那个值, 它返回的Observable将发射true,否则发射false。
IsEmpty:相关的一个操作符IsEmpty用于判定原始Observable是否没有发射任何数据。
exists:RxJava中还有一个exists操作符,它通过一个谓词函数测试原始Observable发射的数据,只要任何一项满足条件就返回一个发射true的Observable,否则返回一个发射false的Observable。
示例代码:
//Contains:判定一个Observable是否发射一个特定的值 Observable.just(4,5,6) .contains(4) .subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { Log.v(TAG, "contains(4):"+aBoolean); } }); //isEmpty:判定原始Observable是否没有发射任何数据 Observable.just(4,5,6) .isEmpty() .subscribe(aBoolean->Log.v(TAG, "isEmpty():"+aBoolean)); //exists操作符,它通过一个谓词函数测试原始Observable发射的数据, // 只要任何一项满足条件就返回一个发射true的Observable, // 否则返回一个发射false的Observable。 Observable.just(4,5,6) .exists(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { return integer<5; } }) .subscribe(aBoolean->Log.v(TAG, "exists():"+aBoolean));
输出:
contains(4):true
isEmpty():false
exists():true
4. DefaultIfEmpty
DefaultIfEmpty简单的精确地发射原始Observable的值,如果原始Observable没有发射任何数据正常终止(以onCompletedd的形式),DefaultIfEmpty返回的Observable就发射一个你提供的默认值。示例代码:
Observable.empty() .defaultIfEmpty(10) .subscribe(integer->Log.v(TAG, "defaultIfEmpty():"+integer));
输出:
defaultIfEmpty():10
5. SequenceEqual
判定两个Observables是否发射相同的数据序列。 传递两个Observable给SequenceEqual操作符,它会比较两个Observable的发射物,如果两个序列是相同的(相同的数据,相同的顺序,相同的终止状态),它就发射true,否则发射false。示例代码:
Observable.sequenceEqual( //第一个Observable延迟1秒发射数据 Observable.just(4,5,6).delay(1,TimeUnit.SECONDS), Observable.just(4,5,6)) .subscribe(aBoolean -> Log.v(TAG, "sequenceEqual:"+aBoolean));
输出:
sequenceEqual:true
6. SkipUntil
SkipUntil订阅原始的Observable,但是忽略它的发射物,直到第二个Observable发射了一项数据那一刻,它开始发射原始Observable。示例代码:
Observable.interval(1, TimeUnit.SECONDS) .take(6) .skipUntil(Observable.just(10).delay(3,TimeUnit.SECONDS)) .subscribe(aBoolean -> Log.v(TAG, "skipUntil:"+aBoolean));
输出:
skipUntil:3
skipUntil:4
skipUntil:5
7. SkipWhile
SkipWhile订阅原始的Observable,但是忽略它的发射物,直到你指定的某个条件变为false的那一刻,它开始发射原始Observable。示例代码:
Observable.interval(1, TimeUnit.SECONDS) .take(6) .skipWhile(new Func1<Long, Boolean>() { @Override public Boolean call(Long aLong) { return aLong<3; //舍弃原Observable发射的数据,直到发射的数据>=3,才继续发射 } }) .subscribe(aBoolean -> Log.v(TAG, "SkipWhile:"+aBoolean));
输出:
SkipWhile:3
SkipWhile:4
SkipWhile:5
8. TakeUntil
TakeUntil订阅并开始发射原始Observable,它还监视你提供的第二个Observable。如果第二个Observable发射了一项数据或者发射了一个终止通知( onError通知或一个onCompleted通知),TakeUntil返回的Observable会停止发射原始Observable并终止。示例代码:
//3s后takeUntil的参数Observable发射数据,停止原始Observable Observable.interval(1, TimeUnit.SECONDS) .takeUntil(Observable.timer(3, TimeUnit.SECONDS)) .subscribe(aBoolean -> Log.v(TAG, "TakeUntil:"+aBoolean));
输出:
TakeUntil:0
TakeUntil:1
9. TakeWhile
TakeWhile发射原始Observable,直到你指定的某个条件不成立的那一刻,它停止发射原始Observable,并终止自己的Observable。示例代码:
Observable.interval(1, TimeUnit.SECONDS) .takeWhile(new Func1<Long, Boolean>() { @Override public Boolean call(Long aLong) { return aLong<3; } }) .subscribe(aBoolean -> Log.v(TAG, "TakeWhile:"+aBoolean));
输出:
TakeWhile:0
TakeWhile:1
TakeWhile:2
源码下载:
https://github.com/openXu/RxJavaTest相关文章推荐
- 单例模式--设计模式1
- Java防盗链在报表中的应用实例
- Java NIO 系列教程
- Eclipse C/CPP 调试教程
- JDK服务器存储
- (Java)LeetCode-29. Divide Two Integers
- 使用java自带的定时任务ScheduledThreadPoolExecutor
- Java系列笔记(6) - 并发(上)
- 【Java多线程】volatile关键字的含义
- 【分析】Java Math.random()导致主线程假死
- Struts2学习第一天——struts2基本流程与配置
- java 虚拟机工具
- Spring 接收参数乱码问题
- Java异常处理的10个最佳实践
- Java查询MySQL数据库示例
- 用JAVA实现数据库查询
- java23种设计模式全解析
- java cmd命令如何引用多个外部jar
- 1.Java开发前奏
- Maven-----源码、JavaDoc打包插件