RxJava 2.x 之创建操作符

原文地址:
https://blog.csdn.net/byhook/article/details/83279168

最近几天想把Rxjava2的操作符都整理一下,看到网上的很多文章都总结的很好,但是时间久了依然会忘记。

创建操作符

just

just操作符一次可以发送多个数据,最多支持10个数据元素

//最多支持10个数据元素
Observable.just(1, 2, 3, 4, 5)
          .subscribeWith(new CommonObserver<>());

输出:

onNext 1
onNext 2
onNext 3
onNext 4
onNext 5
onComplete

Process finished with exit code 0

fromArray

fromArray操作符接收任意长度的数据数组

Observable.fromArray(1, 2, 3, 4, 5, 6, 7)
          .subscribeWith(new CommonObserver<>());

输出:

onNext 1
onNext 2
onNext 3
onNext 4
onNext 5
onNext 6
onNext 7
onComplete

Process finished with exit code 0

empty

empty操作符不会发送任何数据,而是直接发送onComplete事件

Observable.empty()
          .subscribeWith(new CommonObserver<>());

输出:

onComplete

Process finished with exit code 0

error

error操作符不会发送任何数据,而是直接发送onError事件

Observable.error(new NullPointerException())
          .subscribeWith(new CommonObserver<>());
onError java.lang.NullPointerException

Process finished with exit code 0

never

never操作符什么都不会发送的,也不会触发观察者任何的回调

Observable.never()
          .subscribeWith(new CommonObserver<>());

fromIterable

fromIterable操作符可以遍历可迭代数据集合

Observable.fromIterable(Arrays.asList(1, 2, 3, 4, 5))
          .subscribeWith(new CommonObserver<>());

输出:

onNext 1
onNext 2
onNext 3
onNext 4
onNext 5
onComplete

Process finished with exit code 0

timer

timer操作符用来指定时间间隔触发回调

Observable.timer(1, TimeUnit.SECONDS).subscribeWith(new CommonObserver<>());

输出:

onNext 0
onComplete

interval

interval操作符会不断地发送数据

Observable.interval(1, TimeUnit.SECONDS).subscribeWith(new CommonObserver<>());

输出:

onNext 0
onNext 1
onNext 2
onNext 3
......

intervalRange

intervalRange操作符指定发送数据的范围和时间间隔

Observable.intervalRange(0, 5, 0, 1, TimeUnit.SECONDS).subscribeWith(new CommonObserver<>());

输出:

onNext 0
onNext 1
onNext 2
onNext 3
onNext 4
onComplete

Process finished with exit code 0

注意:
当范围内的数据发送完毕就会回调onComplete方法

range / rangeLong

range和rangeLong操作符都是指定范围发送数据

Observable.range(0, 5).subscribeWith(new CommonObserver<>());

输出:

onNext 0
onNext 1
onNext 2
onNext 3
onNext 4
onComplete

Process finished with exit code 0

defer

defer操作符可以使一个被观察者订阅多个观察者

Observable<String> observable = Observable.defer(new Callable<ObservableSource<String>>() {
            @Override
            public ObservableSource<String> call() throws Exception {
                return Observable.just("hello", "world");
            }
        });
//订阅第一个观察者
observable.subscribeWith(new CommonObserver<>());
//订阅第二个观察者
observable.subscribeWith(new CommonObserver<>());

输出:

onNext hello
onNext world
onComplete
onNext hello
onNext world
onComplete

Process finished with exit code 0

注意:
只有当第一个观察者执行完后才回去创建第二个被观察者然后订阅观察者

复习文档
https://github.com/byhook/rxjava2-study

参考:
https://maxwell-nc.github.io/android/rxjava2-2.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 日子,被捣碎 藏在枕头底下 盛满黄昏 记忆的履历 在河床上,失眠 谎言,像修葺的珍珠 从屋子跑出来,长满 雨水的茧...
    丽日生辉阅读 266评论 8 21
  • 蓝天碧水白云翔, 古树春来透嫩黄。 昔日书声尤在耳, 青丝转瞬已飞霜。 平水韵 下平七阳
    苍浩阅读 3,405评论 16 42
  • 不知不觉中我就写了一百篇简书,虽说质和量都不高,但至少做到了我前文说的,我要改变。这是一个良好的开始,我要保持! ...
    书新一阅读 259评论 0 3