一、描述
将一个Observable分拆为一些Observables集合,它们中的每一个发射原始Observable的一个子序列。
GroupBy操作符将原始Observable分拆为一些Observables集合,它们中的每一个发射原始Observable数据序列的一个子序列。哪个数据项由哪一个Observable发射是由一个函数判定的,这个函数给每一项指定一个Key,Key相同的数据会被同一个Observable发射。
RxJava实现了groupBy操作符。它返回Observable的一个特殊子类GroupedObservable,实现了GroupedObservable接口的对象有一个额外的方法getKey,这个Key用于将数据分组到指定的Observable。
有一个版本的groupBy允许你传递一个变换函数,这样它可以在发射结果GroupedObservable之前改变数据项。
注意:groupBy将原始Observable分解为一个发射多个GroupedObservable的Observable,一旦有订阅,每个GroupedObservable就开始缓存数据。因此,如果你忽略这些GroupedObservable中的任何一个,这个缓存可能形成一个潜在的内存泄露。因此,如果你不想观察,也不要忽略GroupedObservable。你应该使用像take(0)这样会丢弃自己的缓存的操作符。
如果你取消订阅一个GroupedObservable,那个Observable将会终止。如果之后原始的Observable又发射了一个与这个Observable的Key匹配的数据,groupBy将会为这个Key创建一个新的GroupedObservable。
groupBy默认不在任何特定的调度器上执行。
二、示意图
三、示例代码
1 | // 完整流程版 |
四、运行结果
1 | (完整流程版) |
项目代码已上传到Github:https://github.com/SherlockShi/RxJavaBestPractise
五、更多
groupBy操作符共有以下几个变体:
- groupBy(Func1)
- groupBy(Func1,Func1)
详情可查阅下面的参考资料。
六、参考资料
PS:欢迎关注 SherlockShi 个人博客