RxKotlin 例子不超过15行教程 1----环境配置与初体验

找了很多天也没有找到关于 RxKotlin 的文章,而 RxJava 的文章不能体现 Kotlin 的优势。那就自己动手写。

我看不懂长篇大论,所以这个系列没有一个例子超过15行 : )

版本

  • Kotlin 1.2
  • JDK 8 (IDEA 在 9 中会有一些异常)
  • Gradle 4.5
  • RxKotlin 2.2

完整源代码

Github

配置

build.gradledependencies 中加入

compile 'io.reactivex.rxjava2:rxkotlin:2.2.0'

开始

// 1.kt
import io.reactivex.*
import io.reactivex.rxkotlin.*

fun main(args: Array) {
    val list: List = listOf("One", 2, "Three", "Four", 4.5, "Five", 6.0f)  // 类型标注可省,这里添加是为了看得清楚,下同
    val observable: Observable = 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) {  // Subject 后续会提及
    val subject: Subject = 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 Observersubscribe

前置知识补充

Lambda Function

// 3.kt
fun main(args: Array) {
    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) {
    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 简介

RxKotlin 例子不超过15行教程 8----Error Handling

你可能感兴趣的:(RxKotlin 例子不超过15行教程 1----环境配置与初体验)