將Observable轉(zhuǎn)換為另一個(gè)對(duì)象或數(shù)據(jù)結(jié)構(gòu)
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/to.c.png" alt="to" />
ReactiveX的很多語(yǔ)言特定實(shí)現(xiàn)都有一種操作符讓你可以將Observable或者Observable發(fā)射的數(shù)據(jù)序列轉(zhuǎn)換為另一個(gè)對(duì)象或數(shù)據(jù)結(jié)構(gòu)。它們中的一些會(huì)阻塞直到Observable終止,然后生成一個(gè)等價(jià)的對(duì)象或數(shù)據(jù)結(jié)構(gòu);另一些返回一個(gè)發(fā)射那個(gè)對(duì)象或數(shù)據(jù)結(jié)構(gòu)的Observable。
在某些ReactiveX實(shí)現(xiàn)中,還有一個(gè)操作符用于將Observable轉(zhuǎn)換成阻塞式的。一個(gè)阻塞式的Ogbservable在普通的Observable的基礎(chǔ)上增加了幾個(gè)方法,用于操作Observable發(fā)射的數(shù)據(jù)項(xiàng)。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/B.getIterator.png" alt="getIterator" />
getIterator操作符只能用于BlockingObservable的子類(lèi),要使用它,你首先必須把原始的Observable轉(zhuǎn)換為一個(gè)BlockingObservable??梢允褂眠@兩個(gè)操作符:BlockingObservable.from或the Observable.toBlocking。
這個(gè)操作符將Observable轉(zhuǎn)換為一個(gè)Iterator,你可以通過(guò)它迭代原始Observable發(fā)射的數(shù)據(jù)集。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/B.toFuture.png" alt="toFuture" />
toFuture操作符也是只能用于BlockingObservable。這個(gè)操作符將Observable轉(zhuǎn)換為一個(gè)返回單個(gè)數(shù)據(jù)項(xiàng)的Future,如果原始Observable發(fā)射多個(gè)數(shù)據(jù)項(xiàng),Future會(huì)收到一個(gè)IllegalArgumentException;如果原始Observable沒(méi)有發(fā)射任何數(shù)據(jù),Future會(huì)收到一個(gè)NoSuchElementException。
如果你想將發(fā)射多個(gè)數(shù)據(jù)項(xiàng)的Observable轉(zhuǎn)換為Future,可以這樣用:myObservable.toList().toBlocking().toFuture()。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/B.toIterable.png" alt="toIterable" />
toFuture操作符也是只能用于BlockingObservable。這個(gè)操作符將Observable轉(zhuǎn)換為一個(gè)Iterable,你可以通過(guò)它迭代原始Observable發(fā)射的數(shù)據(jù)集。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/toList.png" alt="toList" />
通常,發(fā)射多項(xiàng)數(shù)據(jù)的Observable會(huì)為每一項(xiàng)數(shù)據(jù)調(diào)用onNext方法。你可以用toList操作符改變這個(gè)行為,讓Observable將多項(xiàng)數(shù)據(jù)組合成一個(gè)List,然后調(diào)用一次onNext方法傳遞整個(gè)列表。
如果原始Observable沒(méi)有發(fā)射任何數(shù)據(jù)就調(diào)用了onCompleted,toList返回的Observable會(huì)在調(diào)用onCompleted之前發(fā)射一個(gè)空列表。如果原始Observable調(diào)用了onError,toList返回的Observable會(huì)立即調(diào)用它的觀察者的onError方法。
toList默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/toMap.png" alt="toMap" />
toMap收集原始Observable發(fā)射的所有數(shù)據(jù)項(xiàng)到一個(gè)Map(默認(rèn)是HashMap)然后發(fā)射這個(gè)Map。你可以提供一個(gè)用于生成Map的Key的函數(shù),還可以提供一個(gè)函數(shù)轉(zhuǎn)換數(shù)據(jù)項(xiàng)到Map存儲(chǔ)的值(默認(rèn)數(shù)據(jù)項(xiàng)本身就是值)。
toMap默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/toMultiMap.png" alt="toMultiMap" />
toMultiMap類(lèi)似于toMap,不同的是,它生成的這個(gè)Map同時(shí)還是一個(gè)ArrayList(默認(rèn)是這樣,你可以傳遞一個(gè)可選的工廠方法修改這個(gè)行為)。
toMultiMap默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/toSortedList.png" alt="toSortedList" />
toSortedList類(lèi)似于toList,不同的是,它會(huì)對(duì)產(chǎn)生的列表排序,默認(rèn)是自然升序,如果發(fā)射的數(shù)據(jù)項(xiàng)沒(méi)有實(shí)現(xiàn)Comparable接口,會(huì)拋出一個(gè)異常。然而,你也可以傳遞一個(gè)函數(shù)作為用于比較兩個(gè)數(shù)據(jù)項(xiàng),這是toSortedList不會(huì)使用Comparable接口。
toSortedList默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/nest.png" alt="nest" />
nest操作符有一個(gè)特殊的用途:將一個(gè)Observable轉(zhuǎn)換為一個(gè)發(fā)射這個(gè)Observable的Observable。