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

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

RxKotlin 例子不超过15行教程 2----Observable Observer 与 subscribe 简介

RxKotlin 例子不超过15行教程 3----Observable 的创建

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

转载于:https://my.oschina.net/u/3783295/blog/1623445

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值