RxJava进阶一(创建类操作符)
RxJava进阶二(转换类操作符)
RxJava进阶三(过滤类操作符)
RxJava进阶四(组合类操作符)
前言
本篇文章带着大家熟悉一下RxJava的组合类操作符,本系列文章仅是带大家认识一下这些操作符的用法,并没有对操作符进行多种形态的使用,具体的还需要大家在使用时注意~
操作符总览
CombineLatest、Join、Merge、StartWith、Switch、Zip…
具体使用介绍
####CombineLatest ##
当两个Observables中的任何一个发射了一个数据时,将两个Observables数据通过指定的规则进行处理,将结果进行发射~
代码示例:
|
|
运行结果:
|
|
结论:
1.只有当两个observable都发射过第一项数据时,才能进行组合发射
从log日志来看,observable1打印的第一项数据为1,所以可以推断observable1发射的0数据时,observable2并没有发射过数据,所以并没有进行组合。
2.当observable1与observable2都发射首个数据后,在此发射任何数据都会找相应的另外一个observable的最新数据进行组合发射
Join
无论何时,如果一个Observable发射了一个数据项,只要在另一个Observable发射的数据项定义的时间窗口内,就将两个Observable发射的数据合并发射~
|
|
运行结果:
|
|
结论:
1.只有当两个observable都发射过第一项数据时,才能进行组合发射
从log日志来看,observable1发射数据0时,组合的call方法并没有被执行,而当observable2发射数据0后,组合call方法被回调了。
2.当observable1与observable2都发射首个数据后,在此发射任何数据都会找相应的另外一个observable的最新数据进行组合发射
####Merge##
将两个Observable发射的数据按照时间顺序进行组合,合并成一个Observable进行发射~
代码示例:
|
|
运行结果:
|
|
####StartWith##
在源Observable发射数据之前,先发射一个指定的数据序列或数据项~
代码示例:
|
|
运行结果:
|
|
####switchOnNext##
把一组Observable转换成一个Observable,如果在同一个时间内产生两个或多个Observable产生的数据,只发射最后一个Observable产生的数据~
示例代码:
|
|
运行结果:
|
|
####Zip##
使用一个指定的函数将多个Observable发射的数据组合在一起,然后将这个函数的结果作为单项数据发射,严格周期顺序进行合并,不能单独发射~
示例代码:
|
|
运行结果:
|
|
结论:
1.只有每个observable都依次产品一轮数据时,才会统一发射一次,当不会有完整一轮数据时,视为完成
从log日志来看,observable1产生的数据是与observable2一一对应的,也就是只有observable1与observable2同时产生数据时才会统一发射一次~
2.当不满足所有observable都有数据可产品时,视为完成状态
从log日志来看,observable2最后一项数据“Jordan - 4”并没有打印,原因是observable1并没有数据可以产生了,所以不满足发射条件,视为完成状态~
结语
组合类操作符,就简单介绍到这里,希望能够对同学有所帮助,谢谢~