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