最通俗易懂的教你使用RxJava3(三)

Rxjava 系列目录

  1. 最通俗易懂的教你使用RxJava3(一)
  2. 最通俗易懂的教你使用RxJava3(二)
  3. 最通俗易懂的教你使用RxJava3(三)

博客创建时间:2021.04.17
博客更新时间:2021.04.12

以Android studio build=4.1.3,gradle=6.5,SdkVersion 30来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已


前言

本篇博文主要讲解在使用Rxjava中的常用操作符。操作的使用能使我们的代码极其简单和容易阅读。

创建操作符

1. create
最常见的创建方式,内部方法在mObservable被订阅时执行

  private fun create() {
        val mObservable: Observable<String> = Observable.create {}
    }

2. just
just操作符的功能就是将一个对象转化为Observable。这里将字符创变为了一个Observable。

  val myObservable = Observable.just("Hello, world!")

3.from操作符

val mObservable: Observable<String> = Observable.from("Hello", " world!", "how", "are", "you")

该方法已经在Rxjava3中没有了


转换操作符

1. map
接收一种类型的Observable,转化为另外一种Observable。如下将String类型转为Int型

    Observable.just("110").map { s -> s.toInt() }
                .subscribe {
                    val data = it * 6
                    val i = Log.i("+++++++++", "" + data)
                }

2. flatMap操作符
接收一个Observable的输出作为输入,同时输出另外一个Observable

   Observable.just("Hello, world!").flatMap { s: String ->
            val data = "测试$s"
            Observable.just(data)
        }

限定操作符

1. filter
顾名思义filter操作符就是过滤用的,相当于加个判断条件。

        Observable.fromArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                .filter { data -> data in 4..7 }
                .subscribe { data -> Log.i("+++++++++", "" + data) }
// 运行输出: 4 5 6 7

2. take
限定个数,比如此处限定 2个元素

        Observable.fromArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                .filter { data -> data in 4..7 }
                .take(2)
                .subscribe { data -> Log.i("+++++++++", "" + data) }
  // 运行输出: 4 5 

3. doOnNext
输出一个元素之前做一些额外的事情,比如保存数据

        Observable.fromArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                .filter { data -> data in 4..7 }
                . doOnNext{data->
                    run {
                        //TODO  保存数据
                    }
                } 
                .subscribe { data -> Log.i("+++++++++", "" + data) }


限流操作符

下面的操作符都是背压策略可采用的操作符

1. sample与throttleLast
定期收集observable发送的数据items,并发射出最后一个数据item。

query().sample(500,TimeUnit.MILLISECONDS)
query().throttleLast(500,TimeUnit.MILLISECONDS)

2. throttleFirst
指定时间发送最后或第一个元素

query().throttleFirst(500,TimeUnit.MILLISECONDS)

3. debounce 与 throttleWithTimeout
只发送在规定时间间隔内最后一个元素。与samplethrottleLast有所不同的是只会发射一次数据

query().debounce(500,TimeUnit.MILLISECONDS)
query().throttleWithTimeout(500,TimeUnit.MILLISECONDS)

4. buffer and window
定期关闭并释放突发性的 Observable 缓冲区。

query().buffer(500,TimeUnit.MILLISECONDS)
query().window(500,TimeUnit.MILLISECONDS)

其他操作符

1.subscribeOn/observeOn
这两个操作符一般都是成对出现的,他们的功能就是切换线程。

subscribeOn()主要改变的是被观察者的线程,即call()执行的线程;
observeOn()主要改变的是观察者的线程,即onNext()执行的线程。

                mObservable.subscribeOn(Schedulers.io())
                .observeOn( AndroidSchedulers.mainThread())
                .subscribe { println("  Observable  has  subscribe") }

注意: subscribeOn在observeOn后调用无效

总结

本测试Demo源码
gitee:https://gitee.com/luofaxin/RxJava3Analysis.git
github:https://github.com/l424533553/RxJava3Analysis.git


相关链接

  1. 最通俗易懂的教你使用RxJava3(一)
  2. 最通俗易懂的教你使用RxJava3(二)
  3. 最通俗易懂的教你使用RxJava3(三)

扩展链接:

  1. Rxjava源码分析之IO.Reactivex.Observer
  2. Rxjava源码分析之IO.Reactivex.CompositeDisposable
  3. Rxjava源码分析之IO.Reactivex.Observable

扩展训练:

  1. 多种操作符的使用

博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值