原文地址:http://jbblog.top/MyBlog/html/blogpagecontent.html?id=53
RxKotlin
gradle里面引入:
implementation "io.reactivex:rxkotlin:1.0.0"
implementation "io.reactivex:rxandroid:1.2.1"
Rx 就是异步链式的方式。
以订阅者的方式来实现。
#### 主要有:
Observable 被观察者
Observer 观察者
subscribe 订阅
## 1操作符:
- create 操作符,直接创建一个 Subscriber 对象
Observable.create {
it.onNext("Hello Rx!")
it.onCompleted()
}.subscribe(object : Subscriber() {
override fun onNext(t: String) {
println("onNext() --> $t")
}
override fun onCompleted() {
println("onCompleted()")
}
override fun onError(e: Throwable?) {
println("onError()")
}
})
- just 操作符将一系列对象逐个发射出去,注意集合对象将作为一个整体进行发射
Observable.just(1, 1.0, "String", true)
.subscribe(object : Subscriber(){}
Observable.just(listOf(1, 2, 3, 4, 5))
.subscribe(object : Subscriber>()
- range 在一定范围内向观察者发射整型数据,repeat 重复发射,默认重复无数次
Observable.range(1, 3)
.repeat(2)
- interval 定时向观察者发送一个 Long 类型的数字(逐个叠加)
## 2.Transforming 操作符
- map用于数据类型转换,常见的应用场景比方说id应设成名称
Observable.just(1, 2, 3, 4)
.map {
when (it) {
1 -> "zhangsan"
2 -> "lishi"
3 -> "wangwu"
else -> "liuming"
} } .subscribeBy(onNext = { println(it) })
print: zhangsan、lishi、wangwu、liuming
- flatMap操作类似于Map,但是Map转换是T -> D,但是flatMap是T ->Observable
fun getInfoById(id: Int): Observable {
//模拟耗时请求
return Observable.just(id)
}
Observable.just(1, 2, 3, 4)
.flatMap { getInfoById(it) }
.subscribeBy(onNext = { println(it)})
- filter用于过滤数据
Observable.just(1,2,3,4)
.filter { it > 2 }
.subscribeBy(onNext = { println(it)})
输出:3、4
- groupBy 对数据进行分类。
- buffer对数据进行切片
Observable.range(0, 7)
.buffer(3)
.subscribe(object : Subscriber>() {
override fun onNext(t: List) {
println(t)
}
override fun onCompleted() {
}
override fun onError(e: Throwable?) {
}
})
- zip 用来合并两个 Observable 发射的数据项,根据 Func2() 函数指定的规则生成一个新的 Observable 并发射出去,当其中一个 Observable 发射数据结束或者出现异常后,另一个 Observable 也将停止发射数据
val observable1 = Observable.just(10, 20, 30)
val observable2 = Observable.just(1, 2, 3, 4)
Observable.zip(observable1, observable2) { o1, o2 ->
o1 + o2
}.subscribe(object : Subscriber() {
override fun onNext(t: Int) {
println("onNext() --> $t")
}
override fun onCompleted() {
println("onCompleted()")
}
override fun onError(e: Throwable?) {
println("onError()")
}
})
### 线程切换 [线程切换RxJava 2.0 使用](http://jbblog.top/MyBlog/html/blogpagecontent.html?id=47 "线程切换RxJava 2.0 使用")