RX操作之条件和布操作符(amb、defaultIfEmpty、skipUntil、skipWhile、takeUntil、takeWhile、contains、all、exists、isEmpty)
来源:互联网 发布:linux安装telnet 编辑:程序博客网 时间:2024/06/14 05:19
一、amb
当你传递多个Observable给Amb
时,它只发射其中一个Observable的数据和通知:首先发送通知给Amb
的那个,不管发射的是一项数据还是一个onError
或onCompleted
通知。Amb
将忽略和丢弃其它所有Observables的发射物。
Long[]items = {6l,7l,8l,9l,10l}; Observable<Long> observable = Observable.interval(2, TimeUnit.SECONDS).take(5); Observable<Long> observable1 = Observable.from(items); Subscriber<Long> subscriber = new Subscriber<Long>() { @Override public void onNext(Long v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; Observable.amb(observable,observable1).subscribe(subscriber);
运行结果:
二、defaultIfEmpty
发射来自原始Observable的值,如果原始Observable没有发射任何值,就发射一个默认值。DefaultIfEmpty
简单的精确地发射原始Observable的值,如果原始Observable没有发射任何数据正常终止(以onCompleted
d的形式),DefaultIfEmpty
返回的Observable就发射一个你提供的默认值。
Long[]items ={}; Observable<Long> observable = Observable.from(items); Subscriber<Long> subscriber = new Subscriber<Long>() { @Override public void onNext(Long v) { if(v == 1000){ Log.e(TAG, "onNext.................发射了默认的值:" + v); }else { Log.e(TAG, "onNext................." + v); } } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable.defaultIfEmpty(1000l).subscribe(subscriber);
运行结果:
三、skipUntil
丢弃原始Observable发射的数据,直到第二个Observable发射了一项数据
//所需发射的数据,在observable1发射之前的数据将会被丢失 Observable <Long> observable = Observable.interval(2,TimeUnit.SECONDS).take(5); //当此observale发射数据时,observable的数据才会被传递到onNext中 Observable <Long> observable1 = Observable.interval(5,TimeUnit.SECONDS).take(5); Subscriber<Long> subscriber = new Subscriber<Long>() { @Override public void onNext(Long v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable .skipUntil(observable1) .subscribe(subscriber);运行结果:
四、skipWhile
当条件不满足时执行,SkipWhile
订阅原始的Observable,但是忽略它的发射物,直到你指定的某个条件变为false的那一刻,它开始发射原始Observable。
Observable <Long> observable = Observable.interval(2,TimeUnit.SECONDS).take(5); Subscriber<Long> subscriber = new Subscriber<Long>() { @Override public void onNext(Long v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable .skipWhile(new Func1<Long, Boolean>() { @Override public Boolean call(Long aLong) { return aLong < 4; } }) .subscribe(subscriber);执行结果:
五、takeUntil
当第二个Observable发射了一项数据或者终止时,丢弃原始Observable发射的任何数据。TakeUntil
订阅并开始发射原始Observable,它还监视你提供的第二个Observable。如果第二个Observable发射了一项数据或者发射了一个终止通知,TakeUntil
返回的Observable会停止发射原始Observable并终止。
注:第二个Observable发射一项数据或一个onError
通知或一个onCompleted
通知都会导致takeUntil
停止发射数据
//所需发射的数据,在observable1发射后数据将会被丢失 Observable <Long> observable = Observable.interval(2,TimeUnit.SECONDS).take(5); //当此observale发射数据时,observable的数据还未被发射的将会被丢失 Observable <Long> observable1 = Observable.interval(5,TimeUnit.SECONDS).take(5); Subscriber<Long> subscriber = new Subscriber<Long>() { @Override public void onNext(Long v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable .takeUntil(observable1) .subscribe(subscriber);运行结果:
六、takeWhile
发射Observable发射的数据,直到一个指定的条件不成立。TakeWhile
发射原始Observable,直到你指定的某个条件不成立的那一刻,它停止发射原始Observable,并终止自己的Observable。takeWhile
操作符返回一个镜像原始Observable行为的Observable,直到某一项数据你指定的函数返回false
那一刻,这个新的Observable发射onCompleted
终止通知。
Observable <Long> observable = Observable.interval(1,TimeUnit.SECONDS).take(5); Subscriber<Long> subscriber = new Subscriber<Long>() { @Override public void onNext(Long v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable .takeWhile(new Func1<Long, Boolean>() { @Override public Boolean call(Long aLong) { return aLong<4; } }) .subscribe(subscriber);
运行结果:
七、all
判断是否所发射的所有数据都满足某个条件
Observable <Long> observable = Observable.interval(1,TimeUnit.SECONDS).take(5); Subscriber<Boolean> subscriber = new Subscriber<Boolean>() { @Override public void onNext(Boolean v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable .all(new Func1<Long, Boolean>() { @Override public Boolean call(Long aLong) { return aLong > 4; } }) .subscribe(subscriber);
八、contains
判断所发射的数据是否包含某个值
Observable <Integer> observable = Observable.just(1, 2, 3, 4, 5); Subscriber<Boolean> subscriber = new Subscriber<Boolean>() { @Override public void onNext(Boolean v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable .contains(4) .subscribe(subscriber);
运行结果:
九、exists
只要有任何一项满足条件就返回true
Observable <Integer> observable = Observable.just(1, 2, 3, 4, 5); Subscriber<Boolean> subscriber = new Subscriber<Boolean>() { @Override public void onNext(Boolean v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable .exists(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { return integer >=5; } }) .subscribe(subscriber);
运行结果:
十、isEmpty
判断所发射的Observable是否为空
Observable <Integer> observable = Observable.just(1, 2, 3, 4, 5); Subscriber<Boolean> subscriber = new Subscriber<Boolean>() { @Override public void onNext(Boolean v) { Log.e(TAG, "onNext................." + v); } @Override public void onCompleted() { Log.e(TAG, "onCompleted................."); } @Override public void onError(Throwable e) { Log.e(TAG, "onError....................."); } }; observable .isEmpty() .subscribe(subscriber);运行结果:
- RX操作之条件和布操作符(amb、defaultIfEmpty、skipUntil、skipWhile、takeUntil、takeWhile、contains、all、exists、isEmpty)
- 7.7 Conditional 条件和布尔操作 - All/Amb/Contains/SkipUntil/TakeUntil
- Android函数响应式编程——必学的RxJava条件操作符和布尔操作符all、contains、isEmpty、amb、defaultIfEmpty
- Linq中的TakeWhile和SkipWhile
- 步步为营VS 2008 + .NET 3.5(6) - LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefaul
- 步步为营VS 2008 + .NET 3.5(6) - LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefaul
- Linq中的TakeWhile和SkipWhile的介绍
- Linq中Skip和Take用法(TakeWhile和SkipWhile用法)
- Rx操作符 参考
- Rx常用操作符
- SkipWhile与TakeWhile
- RX操作符之算术和聚合操作(averageInteger、min、max、count、sum、contact、reduce、collect)
- Linq之Take Skip TakeWhile SkipWhile Reverse Union Concat 用法
- 一个让人很容易犯浑的Linq TakeWhile 和SkipWhile
- Take,Skip,TakeWhile,SkipWhile的例子和解释
- Rx 入门(五)-- 转换操作符
- RX操作符之辅助操作符三(using、getIterator、toFuture、toIterator、toMap、toMultiMap、nest)
- RX操作符之结合操作(startWith、merge、mergeDelayError、zip、join、groupjoin、switchOnNext)
- stl_1
- exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: java.net.
- POJ 刷题顺序
- android ScrollView 里嵌套listview listview 重新计算高度
- 编译ffmpeg并支持H264
- RX操作之条件和布操作符(amb、defaultIfEmpty、skipUntil、skipWhile、takeUntil、takeWhile、contains、all、exists、isEmpty)
- Android 不依赖activity的dialog
- NSTimer计时器后台运行的解决方法
- POJ 3111 - K Best(0/1分数规划)
- 设计模式总结之Facade Pattern(外观模式)
- IDEA 单元测试testng入门及testng.xml
- 欢迎使用CSDN-markdown编辑器
- POJ 3255 Roadblocks
- iOS定时刷新按钮的文字,避免按钮闪烁的办法