找了很多天也沒有找到關(guān)于 RxKotlin 的文章,而 RxJava 的文章不能體現(xiàn) Kotlin 的優(yōu)勢。那就自己動手寫。
我看不懂長篇大論,所以這個系列沒有一個例子超過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) // 類型標(biāo)注可省,這里添加是為了看得清楚,下同
val observable: Observable<Any> = list.toObservable() // Observable 后續(xù)會提及
observable.subscribeBy( // 1. 下面用到了 Kotlin 的命名參數(shù) 2. subscribe 后續(xù)會提及
onNext = { println(it) },
onError = { it.printStackTrace() },
onComplete = { println("Done!") }
)
}
輸出
One
2
Three
Four
4.5
Five
6.0
Done!
OK,通過上面的代碼已經(jīng)了解 RxKotlin 的基本工作方式了??墒潜闅v列表這件事情實在發(fā)揮不出來 RxKotlin 的威力。來看下一個例子。
// 2.kt
import io.reactivex.subjects.*
fun isEvenOrOdd(n: Int): String = if ((n % 2) == 0) "Even" else "Odd" // 如果數(shù)字為偶數(shù)返回 "Even" 否則返回 "Odd"
fun main(args: Array<String>) { // Subject 后續(xù)會提及
val subject: Subject<Int> = PublishSubject.create()
subject.map({ isEvenOrOdd(it) }) // map 后續(xù)會提及
.subscribe({ println("The number is $it") })
subject.onNext(4)
subject.onNext(9)
}
輸出
The number is Even
The number is Odd
這節(jié)就到這里,下節(jié)內(nèi)容為 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
雖然函數(shù)是編寫模塊化代碼的一種很好的方式,但是它有時會增加開銷(維護(hù)函數(shù)棧)。內(nèi)聯(lián)函數(shù)是避免多余開銷的好方法。
// 4.kt
inline fun doSomeStuff(a: Int) = a * a // 在函數(shù)前加 inline 關(guān)鍵字使其內(nèi)聯(lián)
fun main(args: Array<String>) {
for (i in 1..5) {
println("$i Output ${doSomeStuff(i)}") // 這里的函數(shù)調(diào)用會被替換為函數(shù)代碼
}
}
輸出
1 Output 1
2 Output 4
3 Output 9
4 Output 16
5 Output 25
RxKotlin 例子不超過15行教程 1----環(huán)境配置與初體驗
RxKotlin 例子不超過15行教程 2----Observable Observer 與 Subscribe 簡介
RxKotlin 例子不超過15行教程 3----Observable 的創(chuàng)建
RxKotlin 例子不超過15行教程 4----Observer Subscribe 與 Hot/Cold Observable
RxKotlin 例子不超過15行教程 5----Subject
RxKotlin 例子不超過15行教程 6----Operator 與 Marble Diagram
RxKotlin 例子不超過15行教程 7----Backpressure Flowable 與 Subscriber 簡介