## Repeat
创建一个发射特定数据重复多次的Observable
![repeat](https://box.kancloud.cn/be17bb98f49354845ba5acd0ee0ef2bd_1280x610.png)
Repeat重复地发射数据。某些实现允许你重复的发射某个数据序列,还有一些允许你限制重复的次数。
![repeat](https://box.kancloud.cn/973b6ca1bb175f19c6a7f4d25f415d57_1280x618.png)
RxJava将这个操作符实现为`repeat`方法。它不是创建一个Observable,而是重复发射原始Observable的数据序列,这个序列或者是无限的,或者通过`repeat(n)`指定重复次数。
`repeat`操作符默认在`trampoline`调度器上执行。有一个变体可以通过可选参数指定Scheduler。
Javadoc: [repeat()](http://reactivex.io/RxJava/javadoc/rx/Observable.html#repeat())
Javadoc: [repeat(long)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#repeat(long))
Javadoc: [repeat(Scheduler)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#repeat(rx.Scheduler))
Javadoc: [repeat(long,Scheduler)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#repeat(long,%20rx.Scheduler))
### repeatWhen
![repeatWhen](https://box.kancloud.cn/9de6e7e0d8922f85f02bfb22f6c57ad3_1280x860.png)
还有一个叫做`repeatWhen`的操作符,它不是缓存和重放原始Observable的数据序列,而是有条件的重新订阅和发射原来的Observable。
将原始Observable的终止通知(完成或错误)当做一个`void`数据传递给一个通知处理器,它以此来决定是否要重新订阅和发射原来的Observable。这个通知处理器就像一个Observable操作符,接受一个发射`void`通知的Observable为输入,返回一个发射`void`数据(意思是,重新订阅和发射原始Observable)或者直接终止(意思是,使用`repeatWhen`终止发射数据)的Observable。
`repeatWhen`操作符默认在`trampoline`调度器上执行。有一个变体可以通过可选参数指定Scheduler。
* Javadoc: [repeatWhen(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#repeatWhen(rx.functions.Func1))
* Javadoc: [repeatWhen(Func1,Scheduler)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#repeatWhen(rx.functions.Func1,%20rx.Scheduler))
### doWhile
![doWhile](https://box.kancloud.cn/2861544cb4107871a5082b7c9e20ee8d_1280x1080.png)
`doWhile` 属于可选包`rxjava-computation-expressions`,不是RxJava标准操作符的一部分。`doWhile`在原始序列的每次重复后检查某个条件,如果满足条件才重复发射。
### whileDo
![whileDo](https://box.kancloud.cn/4ae5a1a2de41d5110ba77c61aeedd22a_1280x1200.png)
`whileDo` 属于可选包`rxjava-computation-expressions`,不是RxJava标准操作符的一部分。`whileDo`在原始序列的每次重复前检查某个条件,如果满足条件才重复发射。
- 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模块
- 参与开发
- 补充阅读材料