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、付费专栏及课程。

余额充值