专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
开发者全社区  ·  华为青浦的工作餐,被网友调侃太贵...... ·  11 小时前  
开发者全社区  ·  WC!阿里P7总包超150w ·  21 小时前  
开发者全社区  ·  AI提升成人玩具用户体验 ·  昨天  
开发者全社区  ·  离谱瓜!约会8个女同事的大厂男 ·  昨天  
开发者全社区  ·  人大发TT了 ·  3 天前  
51好读  ›  专栏  ›  安卓开发精选

RxJava操作符系列三(下)

安卓开发精选  · 公众号  · android  · 2016-12-30 21:48

正文

(点击 上方公众号 ,可快速关注)


来源:伯乐在线专栏作者 - 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 (







请到「今天看啥」查看全文