將一個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ù)項(xiàng)由哪一個Observable發(fā)射是由一個函數(shù)判定的,這個函數(shù)給每一項(xiàng)指定一個Key,Key相同的數(shù)據(jù)會被同一個Observable發(fā)射。
RxJava實(shí)現(xiàn)了groupBy操作符。它返回Observable的一個特殊子類GroupedObservable,實(shí)現(xiàn)了GroupedObservable接口的對象有一個額外的方法getKey,這個Key用于將數(shù)據(jù)分組到指定的Observable。
有一個版本的groupBy允許你傳遞一個變換函數(shù),這樣它可以在發(fā)射結(jié)果GroupedObservable之前改變數(shù)據(jù)項(xiàng)。
注意: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默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。