RxJava操作符系列传送门

网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了吉木萨尔免费建站欢迎大家使用!
https://github.com/xiehui999/fuseProgram
- RxJava操作符系列一
- RxJava操作符系列二
前言
在之前的文章,我们介绍了一些Observable的创建以及数据转换的操作符,其中的一些数据转换的操作符理解还是有一定的难度的,但是相信如果敲一遍代码并且修改各种参数的值,去观察执行的日志,相信还是很容易的理解的。在官网,每个操作符都给出了图例,如果你对文字的理解不够清楚明白,也可以去参考图示帮助自己理解。在这篇文章中,我们将介绍一些常见的过滤操作符,在RxJava中过滤操作符也是比较好理解的,好了,让我们一起继续开启学习之旅吧。
Filter
该操作符接收一个Func1参数,我们可以在其中通过运用你自己的判断条件去判断我们要过滤的数据,当数据通过判断条件后返回true表示发射该项数据,否则就不发射,这样就过滤出了我们想要的数据。如下,我们过滤出不能被2整除的数
- Integer[] ints = {1, 2, 3, 4, 5, 6, 7, 8, 9};
-
- Observable observable = Observable.from(ints).filter(new Func1() {
-
- @Override
-
- public Boolean call(Integer integer) {
-
- return integer % 2 != 0;//返回true,就不会过滤掉,会发射数据,过滤掉返回false的值
-
- }
-
- });
-
- Action1 action1 = new Action1() {
-
- @Override
-
- public void call(Integer i) {
-
- Log.e(TAG, "call: "+i );
-
- }
-
- };
-
- observable.subscribe(action1);
输出日志信息
- call: 1
-
- call: 3
-
- call: 5
-
- call: 7
-
- call: 9
ofType
该操作符是filter操作符的一个特殊形式。它过滤一个Observable只返回指定类型的数据,例如当数据源有字符串和int型数据时,我们想要过滤出字符串就可以使用这个操作符,如下示例代码
- Observable.just(0, "one", 6, 4, "two", 8, "three", 1, "four", 0)
-
- .ofType(String.class)
-
- .subscribe(new Subscriber() {
-
- @Override
-
- public void onCompleted() {
-
- Log.e(TAG, "onCompleted:ofType ");
-
- }
-
-
-
- @Override
-
- public void onError(Throwable e) {
-
- Log.e(TAG, "onError:ofType ");
-
- }
-
-
-
- @Override
-
- public void onNext(String string) {
-
- Log.e(TAG, "onNext:ofType " + string);
-
- }
-
- });
输出日志信息
- onNext:ofType one
-
- onNext:ofType two
-
- onNext:ofType three
-
- onNext:ofType four
-
- onCompleted:ofType
当然除了过滤基本类型的数据,也可以过滤自定义类型数据。
First
如果我们只对Observable发射的***项数据,或者满足某个条件的***项数据感兴趣,则可以使用First操作符。
- Observable.just(10, 11, 12, 13).first().subscribe(new Action1() {
-
- @Override
-
- public void call(Integer integer) {
-
- Log.e(TAG, integer+"");
-
- }
-
- });
上面日志只打印一个值10,当然我们也可以给first传一个参数Fun1,指定一个条件如下
- Observable.just(10, 11, 12, 13).first(new Func1() {
-
- @Override
-
- public Boolean call(Integer integer) {
-
- return integer > 12;
-
- }
-
- }).subscribe(new Action1() {
-
- @Override
-
- public void call(Integer integer) {
-
- Log.e(TAG, integer+"");
-
- }
-
- });
此时输出的信息就是满足integer > 12的***项数据13。
firstOrDefault
该操作符是first操作符的变形。主要是在没有发射任何数据时发射一个你在参数中指定的默认值。如下,它有有两个重载方法。
- Observable.just(11,12,13).firstOrDefault(10).subscribe(new Action1