系列故事的第3篇介绍RxJava的过滤API
debounce
debouncedebounce方法会过滤掉发射速率过快的数据项,只要2次发射的间隔小于debounce,那么前一个就会被抛弃。
distinct
distinctdistinct方法只允许还没有发射过的数据项通过。
distinctUntilChanged
distinctUntilChangeddistinctUntilChanged,一个数据和它的前一个是不同的就可以发射。distinct和distinctUntilChanged都有一个重载方法distinct(Func1)和distinctUntilChanged(Func1),。这个Func1函数根据原始Observable发射的数据项产生一个Key,然后比较这些Key而不是数据本身,来判定两个数据是否是不同的。
elementAt
elementAtelementAt方法只发射第N项数据。如果你传递的是一个负数,或者原始Observable的数据项数小于index+1,将会抛出一个IndexOutOfBoundsException异常。
filter
filterfilter方法只发射Func1函数中call()返回true的数据项。
first
first如果你只对Observable发射的第一项数据,或者满足某个条件的第一项数据感兴趣,你可以使用First操作符。
last方法与first方法是相对应的,不再赘述。
take
taketake方法只发射前面的N项数据。
takeLast方法与take方法相对应,不再赘述。
skip
skipskip方法忽略前N项数据,只保留之后的数据。
skipLast方法与skip方法相对应。
ignoreElements
ignoreElementsignoreElements方法不发射任何数据,只发射Observable的终止通知。
throttle
throttleThrottleFirst发射在那段时间内的第一项数据,ThrottleLast发射那段时间内的最后一项数据,ThrottleLast也可以写成SamplethrottleFirst和throttleLast取得数据后,从取得数据的那项开始计时。throttleWithTimeout是弱化版的debounce,debounce操作符也可以使用时间来进行过滤,这时它跟throttleWithTimeOut使用起来是一样,但是deounce操作符还可以根据一个函数来进行限流。
总结:
以上的方法已经基本例举了RxJava中有关Observable对象过滤的API,具体用法还需要大家多加练习呀!
注:本人会在此系列文章的末尾加上GitHub源码地址,敬请期待。。。
网友评论