RxJava操作符(08-条件和布尔操作)
转载请标明出处:
http://blog.csdn.net/xmxkf/article/details/51671826
本文出自:【openXu的博客】
目录:
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
源码下载:
RxJava操作符(08-条件和布尔操作)的更多相关文章
- Rxjava - 操作符,线程操作的简单使用
目录 创建操作符 10种常用的操作符定义 下面做几个操作符的demo演示 create from repeat defer interval Scheduler 什么是Scheduler? 如何使用S ...
- RxJava操作符实践:8_算术和聚合操作之3_min
发射原始Observable的最小值. Min操作符操作一个发射数值的Observable并发射单个值:最小的那个值. RxJava中,min属于rxjava-math模块. min接受一个可选参数, ...
- RxJava 操作符 on和doOn 线程切换 调度 Schedulers 线程池 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- RxJava操作符总结之过滤
RxJava操作符总结之过滤 jsut() just(T t1, T t2, T t3 ....) ,just能够传入多个同样类型的參数,并将当前參数一个接着一个的发送. Observable.jus ...
- [C#.NET 拾遗补漏]05:操作符的几个骚操作
阅读本文大概需要 1.5 分钟. 大家好,这是极客精神[C#.NET 拾遗补漏]专辑的第 5 篇文章,今天要讲的内容是操作符. 操作符的英文是 Operator,在数值计算中习惯性的被叫作运算符,所以 ...
- 【NX二次开发】布尔操作
//布尔操作 //UF_MODL_operations 对两个体执行布尔操作 //UF_MODL_unite_bodies 相加布尔操作,不可保留目标体.工具体 //UF_MODL_unite_bod ...
- RxJava操作符(07-辅助操作)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51658445 本文出自:[openXu的博客] 目录: Delay Do Materiali ...
- RxJava操作符(05-结合操作)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51656736 本文出自:[openXu的博客] 目录: CombineLatest Join ...
- RxJava操作符(04-过滤操作)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51656494 本文出自:[openXu的博客] 目录: Debounce Distinct ...
随机推荐
- DDCTF 2018线上赛writeup
第一题: d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e ...
- java.sql.SQLException: null, message from server: "Host '192.168.126.100' is not allowed to connect to this MySQL server"
- 推荐一个c++小巧开源且跨平台的图像解码库
该图像解码库仅仅三个文件. 图像处理封装: spot.cpp spot.h 解码库实现: spot.c 支持图片文件格式如下: File format Read Write BMP files yes ...
- bzoj 2435: [Noi2011]道路修建
Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...
- hdu 5115(2014北京—dp)
题意: 有一排狼,每只狼有一个伤害A,还有一个伤害B.杀死一只狼的时候,会受到这只狼的伤害A和这只狼两边的狼的伤害B的和.如果某位置的狼被杀,那么杀它左边的狼时就会收到来自右边狼的B,因为这两只狼是相 ...
- [51nod1238]最小公倍数之和V3
来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...
- spring 自定义事件发布及监听(简单实例)
前言: Spring的AppilcaitionContext能够发布事件和注册相对应的事件监听器,因此,它有一套完整的事件发布和监听机制. 流程分析: 在一个完整的事件体系中,除了事件和监听器以外,还 ...
- 初识 Runtime
前言 之前在看一些第三方源码的时候,时不时的能碰到一些关于运行时相关的代码.于是乎,就阅读了一些关于运行时的文章,感觉写的都不错,写此篇文章为了记录一下,同时也重新学习一遍. Runtime简介 Ru ...
- Go实现海量日志收集系统(四)
到这一步,我的收集系统就已经完成很大一部分工作,我们重新看一下我们之前画的图: 我们已经完成前面的部分,剩下是要完成后半部分,将kafka中的数据扔到ElasticSearch,并且最终通过kiban ...
- jquery easyui combox不能编辑只能选择
$('#tts').combobox({ editable:false });