找了很多天也没有找到关于 RxKotlin 的文章,而 RxJava 的文章不能体现 Kotlin 的优势。那就自己动手写。
我看不懂长篇大论,所以这个系列没有一个例子超过15行 : )
版本
- Kotlin 1.2
- JDK 8 (IDEA 在 9 中会有一些异常)
- Gradle 4.5
- RxKotlin 2.2
完整源代码
配置
build.gradle 在 dependencies 中加入
compile 'io.reactivex.rxjava2:rxkotlin:2.2.0'
开始
// 1.kt
import io.reactivex.*
import io.reactivex.rxkotlin.*
fun main(args: Array<String>) {
val list: List<Any> = listOf("One", 2, "Three", "Four", 4.5, "Five", 6.0f) // 类型标注可省,这里添加是为了看得清楚,下同
val observable: Observable<Any> = list.toObservable() // Observable 后续会提及
observable.subscribeBy( // 1. 下面用到了 Kotlin 的命名参数 2. subscribe 后续会提及
onNext = { println(it) },
onError = { it.printStackTrace() },
onComplete = { println("Done!") }
)
}
输出
One
2
Three
Four
4.5
Five
6.0
Done!
OK,通过上面的代码已经了解 RxKotlin 的基本工作方式了。可是遍历列表这件事情实在发挥不出来 RxKotlin 的威力。来看下一个例子。
// 2.kt
import io.reactivex.subjects.*
fun isEvenOrOdd(n: Int): String = if ((n % 2) == 0) "Even" else "Odd" // 如果数字为偶数返回 "Even" 否则返回 "Odd"
fun main(args: Array<String>) { // Subject 后续会提及
val subject: Subject<Int> = PublishSubject.create()
subject.map({ isEvenOrOdd(it) }) // map 后续会提及
.subscribe({ println("The number is $it") })
subject.onNext(4)
subject.onNext(9)
}
输出
The number is Even
The number is Odd
这节就到这里,下节内容为 Observable
Observer
与 subscribe
前置知识补充
Lambda Function
// 3.kt
fun main(args: Array<String>) {
val sum = { x: Int, y: Int -> x + y }
println("Sum ${sum(12, 14)}")
}
输出
Sum 26
Inline Function
虽然函数是编写模块化代码的一种很好的方式,但是它有时会增加开销(维护函数栈)。内联函数是避免多余开销的好方法。
// 4.kt
inline fun doSomeStuff(a: Int) = a * a // 在函数前加 inline 关键字使其内联
fun main(args: Array<String>) {
for (i in 1..5) {
println("$i Output ${doSomeStuff(i)}") // 这里的函数调用会被替换为函数代码
}
}
输出
1 Output 1
2 Output 4
3 Output 9
4 Output 16
5 Output 25
RxKotlin 例子不超过15行教程 1----环境配置与初体验
RxKotlin 例子不超过15行教程 2----Observable Observer 与 Subscribe 简介
RxKotlin 例子不超过15行教程 3----Observable 的创建
RxKotlin 例子不超过15行教程 4----Observer Subscribe 与 Hot/Cold Observable
RxKotlin 例子不超过15行教程 5----Subject
RxKotlin 例子不超过15行教程 6----Operator 与 Marble Diagram
RxKotlin 例子不超过15行教程 7----Backpressure Flowable 与 Subscriber 简介
网友评论