RxKotlin

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 也将停止发射数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值