將一個Observable分拆為一些Observables集合,它們中的每一個發(fā)射原始Observable的一個子序列
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/groupBy.c.png" alt="groupBy" />
GroupBy
操作符將原始Observable分拆為一些Observables集合,它們中的每一個發(fā)射原始Observable數(shù)據(jù)序列的一個子序列。哪個數(shù)據(jù)項由哪一個Observable發(fā)射是由一個函數(shù)判定的,這個函數(shù)給每一項指定一個Key,Key相同的數(shù)據(jù)會被同一個Observable發(fā)射。
RxJava實現(xiàn)了groupBy
操作符。它返回Observable的一個特殊子類GroupedObservable
,實現(xiàn)了GroupedObservable
接口的對象有一個額外的方法getKey
,這個Key用于將數(shù)據(jù)分組到指定的Observable。
有一個版本的groupBy
允許你傳遞一個變換函數(shù),這樣它可以在發(fā)射結(jié)果GroupedObservable
之前改變數(shù)據(jù)項。
注意:groupBy
將原始Observable分解為一個發(fā)射多個GroupedObservable
的Observable,一旦有訂閱,每個GroupedObservable
就開始緩存數(shù)據(jù)。因此,如果你忽略這些GroupedObservable
中的任何一個,這個緩存可能形成一個潛在的內(nèi)存泄露。因此,如果你不想觀察,也不要忽略GroupedObservable
。你應(yīng)該使用像take(0)
這樣會丟棄自己的緩存的操作符。
如果你取消訂閱一個GroupedObservable
,那個Observable將會終止。如果之后原始的Observable又發(fā)射了一個與這個Observable的Key匹配的數(shù)據(jù),groupBy
將會為這個Key創(chuàng)建一個新的GroupedObservable
。
groupBy
默認不在任何特定的調(diào)度器上執(zhí)行。