## To
將Observable轉換為另一個對象或數據結構

ReactiveX的很多語言特定實現都有一種操作符讓你可以將Observable或者Observable發射的數據序列轉換為另一個對象或數據結構。它們中的一些會阻塞直到Observable終止,然后生成一個等價的對象或數據結構;另一些返回一個發射那個對象或數據結構的Observable。
在某些ReactiveX實現中,還有一個操作符用于將Observable轉換成阻塞式的。一個阻塞式的Ogbservable在普通的Observable的基礎上增加了幾個方法,用于操作Observable發射的數據項。
### getIterator

`getIterator`操作符只能用于`BlockingObservable`的子類,要使用它,你首先必須把原始的Observable轉換為一個`BlockingObservable`。可以使用這兩個操作符:`BlockingObservable.from`或`the Observable.toBlocking`。
這個操作符將Observable轉換為一個`Iterator`,你可以通過它迭代原始Observable發射的數據集。
* Javadoc: [BlockingObservable.getIterator()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#getIterator())
### toFuture

`toFuture`操作符也是只能用于`BlockingObservable`。這個操作符將Observable轉換為一個返回單個數據項的`Future`,如果原始Observable發射多個數據項,`Future`會收到一個`IllegalArgumentException`;如果原始Observable沒有發射任何數據,`Future`會收到一個`NoSuchElementException`。
如果你想將發射多個數據項的Observable轉換為`Future`,可以這樣用:`myObservable.toList().toBlocking().toFuture()`。
* Javadoc: [BlockingObservable.toFuture()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#toFuture())
### toIterable

`toFuture`操作符也是只能用于`BlockingObservable`。這個操作符將Observable轉換為一個`Iterable`,你可以通過它迭代原始Observable發射的數據集。
* Javadoc: [BlockingObservable.toIterable()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#toIterable())
### toList

通常,發射多項數據的Observable會為每一項數據調用`onNext`方法。你可以用`toList`操作符改變這個行為,讓Observable將多項數據組合成一個`List`,然后調用一次`onNext`方法傳遞整個列表。
如果原始Observable沒有發射任何數據就調用了`onCompleted`,`toList`返回的Observable會在調用`onCompleted`之前發射一個空列表。如果原始Observable調用了`onError`,`toList`返回的Observable會立即調用它的觀察者的`onError`方法。
`toList`默認不在任何特定的調度器上執行。
* Javadoc: [toList()](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toList())
### toMap

`toMap`收集原始Observable發射的所有數據項到一個Map(默認是HashMap)然后發射這個Map。你可以提供一個用于生成Map的Key的函數,還可以提供一個函數轉換數據項到Map存儲的值(默認數據項本身就是值)。
`toMap`默認不在任何特定的調度器上執行。
* Javadoc: [toMap(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toMap(rx.functions.Func1))
* Javadoc: [toMap(Func1,Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toMap(rx.functions.Func1,%20rx.functions.Func1))
* Javadoc: [toMap(Func1,Func1,Func0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toMap(rx.functions.Func1,%20rx.functions.Func1,%20rx.functions.Func0))
### toMultiMap

`toMultiMap`類似于`toMap`,不同的是,它生成的這個Map同時還是一個`ArrayList`(默認是這樣,你可以傳遞一個可選的工廠方法修改這個行為)。
`toMultiMap`默認不在任何特定的調度器上執行。
* Javadoc: [toMultiMap(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toMultimap(rx.functions.Func1))
* Javadoc: [toMultiMap(Func1,Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toMultimap(rx.functions.Func1,%20rx.functions.Func1))
* Javadoc: [toMultiMap(Func1,Func1,Func0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toMultimap(rx.functions.Func1,%20rx.functions.Func1,%20rx.functions.Func0))
* Javadoc: [toMultiMap(Func1,Func1,Func0,Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toMultimap(rx.functions.Func1,%20rx.functions.Func1,%20rx.functions.Func0,%20rx.functions.Func1))
### toSortedList

`toSortedList`類似于`toList`,不同的是,它會對產生的列表排序,默認是自然升序,如果發射的數據項沒有實現`Comparable`接口,會拋出一個異常。然而,你也可以傳遞一個函數作為用于比較兩個數據項,這是`toSortedList`不會使用`Comparable`接口。
`toSortedList`默認不在任何特定的調度器上執行。
* Javadoc: [toSortedList()](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toSortedList())
* Javadoc: [toSortedList(Func2)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toSortedList(rx.functions.Func2))
### nest

`nest`操作符有一個特殊的用途:將一個Observable轉換為一個發射這個Observable的Observable。
- ReactiveX
- Observables
- Single
- Subject
- Scheduler
- Operators
- 創建操作
- Create
- Defer
- Empty/Never/Throw
- From
- Interval
- Just
- Range
- Repeat
- Start
- Timer
- 變換操作
- Buffer
- FlatMap
- GroupBy
- Map
- Scan
- Window
- 過濾操作
- Debounce
- Distinct
- ElementAt
- Filter
- First
- IgnoreElements
- Last
- Sample
- Skip
- SkipLast
- Take
- TakeLast
- 結合操作
- And/Then/When
- CombineLatest
- Join
- Merge
- StartWith
- Switch
- Zip
- 錯誤處理
- Catch
- Retry
- 輔助操作
- Delay
- Do
- Materialize/Dematerialize
- ObserveOn
- Serialize
- Subscribe
- SubscribeOn
- TimeInterval
- Timeout
- Timestamp
- Using
- To
- 條件和布爾操作
- All/Contains/Amb
- DefaultIfEmpty
- SequenceEqual
- SkipUntil/SkipWhile
- TakeUntil/TakeWhile
- 算術和聚合操作
- Average/Concat/Reduce
- Max/Min/Count/Sum
- 異步操作
- 連接操作
- Connect
- Publish
- RefCount
- Replay
- 轉換操作
- 阻塞操作
- 字符串操作
- 按字母順序的操作符列表
- RxJava文檔和教程
- RxJava入門指南
- RxJava使用示例
- 實現自定義操作符
- 自定義插件
- Backpressure
- 錯誤處理
- Android模塊
- 參與開發
- 補充閱讀材料