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