## To
将Observable转换为另一个对象或数据结构
![to](https://box.kancloud.cn/e240901dd17da7f8d169b2cf53275cd6_1280x630.png)
ReactiveX的很多语言特定实现都有一种操作符让你可以将Observable或者Observable发射的数据序列转换为另一个对象或数据结构。它们中的一些会阻塞直到Observable终止,然后生成一个等价的对象或数据结构;另一些返回一个发射那个对象或数据结构的Observable。
在某些ReactiveX实现中,还有一个操作符用于将Observable转换成阻塞式的。一个阻塞式的Ogbservable在普通的Observable的基础上增加了几个方法,用于操作Observable发射的数据项。
### getIterator
![getIterator](https://box.kancloud.cn/f3d7dee7cfb54d0d9ca2bf15f80cd7a8_1280x630.png)
`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](https://box.kancloud.cn/3876360c9e2b347767d14119b9f2f506_1280x790.png)
`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
![toIterable](https://box.kancloud.cn/873a94881e87f1d6ef70cdda3191645a_1280x630.png)
`toFuture`操作符也是只能用于`BlockingObservable`。这个操作符将Observable转换为一个`Iterable`,你可以通过它迭代原始Observable发射的数据集。
* Javadoc: [BlockingObservable.toIterable()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#toIterable())
### toList
![toList](https://box.kancloud.cn/e840e6c1a3b4b13c8ac43157c5489499_1280x610.png)
通常,发射多项数据的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](https://box.kancloud.cn/9464f06991492134ff915b0bddc2fce0_1280x610.png)
`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](https://box.kancloud.cn/bf403be00b721bd52bb5dcb18a1e4894_1280x610.png)
`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](https://box.kancloud.cn/a19e12c4ce9f761ca252c7330b8bb3c5_1280x620.png)
`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](https://box.kancloud.cn/60e6310081a7d7a3b55ecc89c507e755_1280x700.png)
`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模块
- 参与开发
- 补充阅读材料