RxKotlin使用

原文地址:http://jbblog.top/MyBlog/html/blogpagecontent.html?id=53

RxKotlin
gradle里面引入:

implementation "io.reactivex:rxkotlin:1.0.0"
implementation "io.reactivex:rxandroid:1.2.1"


Rx 就是异步链式的方式。
以订阅者的方式来实现。
#### 主要有
Observable 被观察者
Observer 观察者
subscribe 订阅

## 1操作符
- create 操作符,直接创建一个 Subscriber 对象

Observable.create<String> {
    it.onNext("Hello Rx!")
    it.onCompleted()
}.subscribe(object : Subscriber<String>() {
    override fun onNext(t: String) {
        println("onNext() --> $t")
    }
    override fun onCompleted() {
        println("onCompleted()")
    }
    override fun onError(e: Throwable?) {
        println("onError()")
    }
})


- just 操作符将一系列对象逐个发射出去,注意集合对象将作为一个整体进行发射

Observable.just(1, 1.0, "String", true)
    .subscribe(object : Subscriber<Any>(){}
               
Observable.just(listOf(1, 2, 3, 4, 5))
        .subscribe(object : Subscriber<List<Int>>()

- range 在一定范围内向观察者发射整型数据,repeat 重复发射,默认重复无数次

Observable.range(1, 3)
        .repeat(2)

- interval 定时向观察者发送一个 Long 类型的数字(逐个叠加)

## 2.Transforming 操作符
- map用于数据类型转换,常见的应用场景比方说id应设成名称

Observable.just(1, 2, 3, 4)
.map {
when (it) {
1 -> "zhangsan"
2 -> "lishi"
3 -> "wangwu"
else -> "liuming"
} } .subscribeBy(onNext = { println(it) })
    
    print: zhangsan、lishi、wangwu、liuming

- flatMap操作类似于Map,但是Map转换是T -> D,但是flatMap是T ->Observable

fun getInfoById(id: Int): Observable<Int> {
    //模拟耗时请求
    return Observable.just(id)
}

Observable.just(1, 2, 3, 4)
            .flatMap { getInfoById(it) }
            .subscribeBy(onNext = { println(it)})

- filter用于过滤数据

Observable.just(1,2,3,4)
            .filter {  it > 2 }
            .subscribeBy(onNext = { println(it)})
                
输出:3、4


- groupBy 对数据进行分类。
- buffer对数据进行切片

Observable.range(0, 7)
        .buffer(3)
        .subscribe(object : Subscriber<List<Int>>() {
            override fun onNext(t: List<Int>) {
                println(t)
            }
            override fun onCompleted() {
            }
            override fun onError(e: Throwable?) {
            }
        })


- zip 用来合并两个 Observable 发射的数据项,根据 Func2() 函数指定的规则生成一个新的 Observable 并发射出去,当其中一个 Observable 发射数据结束或者出现异常后,另一个 Observable 也将停止发射数据

val observable1 = Observable.just(10, 20, 30)
val observable2 = Observable.just(1, 2, 3, 4)
Observable.zip(observable1, observable2) { o1, o2 ->
    o1 + o2
}.subscribe(object : Subscriber<Int>() {
    override fun onNext(t: Int) {
        println("onNext() --> $t")
    }
    override fun onCompleted() {
        println("onCompleted()")
    }
    override fun onError(e: Throwable?) {
        println("onError()")
    }
})

### 线程切换 [线程切换RxJava 2.0 使用](http://jbblog.top/MyBlog/html/blogpagecontent.html?id=47 "线程切换RxJava 2.0 使用")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值