本书赞誉 xii
译者序 xiii
序 xv
前言 xvii
第 1 章 使用RxJava实现反应式编程 1
1.1 反应式编程与RxJava 1
1.2 何时需要反应式编程 2
1.3 RxJava是如何运行的 3
1.3.1 推送与拉取 3
1.3.2 异步与同步 4
1.3.3 并发与并行 7
1.3.4 延迟执行与立即执行 9
1.3.5 双重性 10
1.3.6 基数 11
1.4 阻塞I O与非阻塞I O 15
1.5 反应式抽象 20
第 2 章 Reactive Extensions 21
2.1 剖析rx.Observable 21
2.2 订阅来自Observable的通知 24
2.3 使用Subscription和Subscriber<T>控制监听器 25
2.4 创建Observable 26
2.4.1 掌握Observable.create() 27
2.4.2 无穷流 30
2.4.3 计时:timer() 和interval() 34
2.4.4 hot和cold类型的Observable 34
2.5 用例:从回调API到Observable流 35
2.6 rx.subjects.Subject 40
2.7 ConnectableObservable 42
2.7.1 使用publish().refCount()实现单次订阅 43
2.7.2 ConnectableObservable 的生命周期 44
2.8 小结 47
第 3 章 操作符与转换 48
3.1 核心的操作符:映射和过滤 48
3.1.1 使用map()进行一对一转换 50
3.1.2 使用flatMap()进行包装 53
3.1.3 使用delay()操作符延迟事件 57
3.1.4 flatMap()之后的事件顺序 58
3.1.5 使用concatMap()保证顺序 60
3.2 多个Observable 61
3.2.1 使用merge()将多个Observable合并为一个 62
3.2.2 使用zip()和zipWith()进行成对地组合 63
3.2.3 流之间不同步的情况:combineLatest()、withLatestFrom()和amb() 66
3.3 高级操作符:collect()、reduce()、scan()、distinct()和groupBy() 71
3.3.1 使用Scan和Reduce扫描整个序列 71
3.3.2 使用可变的累加器进行缩减:collect() 73
3.3.3 使用single()断言的Observable只有一个条目 74
3.3.4 使用distinct()和distinctUntilChanged()丢弃重复条目 74
3.4 使用skip()、takeWhile()等进行切片和切块 76
3.4.1 组合流的方式:concat()、merge()和switchOnNext() 78
3.4.2 使用groupBy()实现基于标准的切块流 84
3.4.3 下一步要学习什么 86
3.5 编写自定义的操作符 87
3.5.1 借助compose()重用操作符 87
3.5.2 使用lift()实现高级操作符 89
3.6 小结 93
第 4 章 将反应式编程应用于已有应用程序 94
4.1 从集合到Observable 94
4.2 BlockingObservable:脱离反应式的
展开