美文网首页kotlinKotlin专题Kotlin
RxKotlin 例子不超过15行教程 1----环境配置与初

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

作者: 蔡洪宇 | 来源:发表于2018-02-22 17:01 被阅读686次

    找了很多天也没有找到关于 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<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 Observersubscribe

    前置知识补充

    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 简介

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

    相关文章

      网友评论

      • 皮特天:感觉这个rxkotlin就是rxjava 然后多加一些扩展函数
        蔡洪宇:@心愿宝宝 对,你说的完全没错。GitHub 书这样介绍 RxKotlin 的 "RxKotlin is a lightweight library that adds convenient extension functions to RxJava. You can use RxJava with Kotlin out-of-the-box, but Kotlin has language features (such as extension functions) that can streamline usage of RxJava even more. RxKotlin aims to conservatively collect these conveniences in one centralized library, and standardize conventions for using RxJava with Kotlin."
      • 蔡洪宇:有各种问题欢迎评论

      本文标题:RxKotlin 例子不超过15行教程 1----环境配置与初

      本文链接:https://www.haomeiwen.com/subject/zuuatftx.html