创建:https://blog.csdn.net/whjk20/article/details/107468612
1. map
//将被观察者发送的数据类型转变成其他的类型
private fun testMap(){
Log.d(TAG, "testMap - start")
// map 里实现Function < Int, String >接口, 覆写了 fun apply(Integer integer) : String
Observable.just(1, 2, 3)
.map { value ->
"I am $value"
}
.subscribe(object : Observer<String> {
override fun onComplete() {
Log.d(TAG, "testMap - Observer=====onComplete")
}
override fun onSubscribe(d: Disposable) {
Log.d(TAG, "testMap - Observer=====onSubscribe")
}
override fun onNext(t: String) {
Log.d(TAG, "testMap - Observer===== onNext parm = $t")
}
override fun onError(e: Throwable) {
Log.d(TAG, "onError - Observer=====onSubscribe")
}
})
Log.d(TAG, "testMap - end")
}
2. flatmap
private fun testFlatMap() {
var plan1 = Plan("06:30", "早上上班准备")
plan1.actionList = mutableListOf("刷牙", "洗脸", "吃早餐")
var plan2 = Plan("12:00", "午餐及午休")
plan2.actionList = mutableListOf("吃饭", "散步", "午休")
var plan3 = Plan("22:00", "睡前准备")
plan3.actionList = mutableListOf("刷牙", "看书", "听音乐")
var planList1 = mutableListOf(plan1, plan2)
var planList2 = mutableListOf(plan1, plan3)
var planList3 = mutableListOf(plan2, plan3)
var person1 = Person("张三", planList1)
var person2 = Person("李四", planList2)
var person3 = Person("王五", planList3)
var personList = mutableListOf(person1, person2, person3)
Observable.fromIterable(personList)
.flatMap<Plan> { person -> Observable.fromIterable(person.getPlanList()) }
.flatMap<String> { plan -> Observable.fromIterable(plan.actionList) }
.subscribe(object : Observer<String> {
override fun onSubscribe(d: Disposable) {}
override fun onNext(s: String) {
Log.d(TAG, "==================action: $s")
}
override fun onError(e: Throwable) {}
override fun onComplete() {}
})
}
class Plan(var time: String, var content: String) {
var actionList: List<String> = ArrayList()
}
class Person(var name: String, planList: List<Plan>) {
private var planList: List<Plan> = ArrayList()
fun getPlanList(): List<Plan> {
return planList
}
fun setPlanList(planList: List<Plan>) {
this.planList = planList
}
init {
this.planList = planList
}
}
3. 输出
07-23 20:26:23.899 D 7664 RxJavaTest: testMap - start
07-23 20:26:23.924 D 7664 RxJavaTest: testMap - Observer=====onSubscribe
07-23 20:26:23.924 D 7664 RxJavaTest: testMap - Observer===== onNext parm = I am 1
07-23 20:26:23.924 D 7664 RxJavaTest: testMap - Observer===== onNext parm = I am 2
07-23 20:26:23.924 D 7664 RxJavaTest: testMap - Observer===== onNext parm = I am 3
07-23 20:26:23.924 D 7664 RxJavaTest: testMap - Observer=====onComplete
07-23 20:26:23.924 D 7664 RxJavaTest: testMap - end
07-23 20:26:23.949 D 7664 RxJavaTest: ==================action: 刷牙
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 洗脸
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 吃早餐
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 吃饭
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 散步
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 午休
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 刷牙
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 洗脸
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 吃早餐
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 刷牙
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 看书
07-23 20:26:23.950 D 7664 RxJavaTest: ==================action: 听音乐
07-23 20:26:23.951 D 7664 RxJavaTest: ==================action: 吃饭
07-23 20:26:23.951 D 7664 RxJavaTest: ==================action: 散步
07-23 20:26:23.951 D 7664 RxJavaTest: ==================action: 午休
07-23 20:26:23.951 D 7664 RxJavaTest: ==================action: 刷牙
07-23 20:26:23.951 D 7664 RxJavaTest: ==================action: 看书
07-23 20:26:23.951 D 7664 RxJavaTest: ==================action: 听音乐