(点击
上方公众号
,可快速关注)
来源:伯乐在线专栏作者 - Code4Android
链接:http://android.jobbole.com/85254/
如有好文章投稿,请点击 → 这里了解详情
接上文
Take
Take操作符可以修改Observable的行为,只返回前面的N项数据,然后发射完成通知,忽略剩余的数据。
Observable
.
range
(
1
,
8
)
.
take
(
4
)
.
subscribe
(
new
Subscriber
()
{
@Override
public
void
onNext
(
Integer
item
)
{
Log
.
e
(
TAG
,
"Next: "
+
item
);
}
@Override
public
void
onError
(
Throwable
error
)
{
Log
.
e
(
TAG
,
"Error: "
+
error
.
getMessage
());
}
@Override
public
void
onCompleted
()
{
Log
.
e
(
TAG
,
"complete."
);
}
});
输出日志信息
Next
:
1
Next
:
2
Next
:
3
Next
:
4
complete
take和skip一样也有其它两个重载方法take(long time, TimeUnit unit),take(long time, TimeUnit unit, Scheduler scheduler),默认在computation调度器上执行。
take还有变体操作符TakeLast,takeLastBuffer具体执行效果可自行代码。
Debounce
该操作符指的是过了一段指定的时间还没发射数据时才发射一个数据,听着可能有点绕。你可以理解对源Observable间隔期产生的结果进行过滤,如果在这个规定的间隔期内没有别的结果产生,则将这个结果提交给订阅者,否则忽略该结果,原理有点像光学防抖
上代码
Observable
.
range
(
1
,
8
)
.
take
(
4
)
.
subscribe
(
new
Subscriber
()
{
@Override
public
void
onNext
(
Integer
item
)
{
Log
.
e
(
TAG
,
"Next: "
+
item
);
}
@Override
public
void
onError
(
Throwable
error
)
{
Log
.
e
(
TAG
,
"Error: "
+
error
.
getMessage
());
}
@Override
public
void
onCompleted
()
{
Log
.
e
(
TAG
,
"complete."
);
}
});
输出信息
onNext
:
4
onNext
:
5
onNext
:
6
onNext
:
7
onNext
:
8
onNext
:
9
onCompleted
:
这个输出数据不一定一样,有可能从5开始。
Distinct
这个比较好理解,它就是过滤掉重复的数据,只允许还没有发射过的数据项通过。
示例代码
Observable
.
just
(
0
,
0
,
6
,
4
,
2
,
8
,
2
,
1
,
9
,
0
)
.
distinct
()
.
subscribe
(
new
Subscriber
()
{
@Override
public
void
onCompleted
()
{
Log
.
e
(
TAG
,
"onCompleted:Distinct "
);
}
@Override
public
void
onError
(
Throwable
e
)
{
Log
.
e
(
TAG
,
"onError:Distinct "
);
}
@Override
public
void
onNext
(
Integer
integer
)
{
Log
.
e
(
TAG
,
"onNext:Distinct "
+
integer
);
}
});
输出日志信息
onNext
:
Distinct
0
onNext
:
Distinct
6
onNext
:
Distinct
4
onNext
:
Distinct
2
onNext
:
Distinct
8
onNext
:
Distinct
1
onNext
:
Distinct
9
onCompleted
:
Distinct
ElementAt
该操作符获取原始Observable发射的数据序列指定索引位置的数据项,然后当做自己的唯一数据发射。给它传递一个基于0的索引值,它会发射原始Observable数据序列对应索引位置的值,如果你传递给elementAt的值为4,那么它会发射第5项的数据。如下示例代码
Observable
.
just
(
0
,
0
,
6
,
4
,
2
,
8
,
2
,
1
,
9
,
0
)
.
elementAt
(
4
)
.
subscribe
(
new
Subscriber
()
{
@Override
public
void
onCompleted
()
{
Log
.
e
(
TAG
,
"onCompleted:ElementAt "
);
}
@Override
public
void
onError
(