(点击
上方公众号
,可快速关注)
来源:伯乐在线专栏作者 - Code4Android
链接:http://android.jobbole.com/85254/
如有好文章投稿,请点击 → 这里了解详情
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
Integer
,
Boolean
>
()
{
@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
String
>
()
{
@
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
Integer
,
Boolean
>
()
{
@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