RxJava 各种操作符(1)
来源:互联网 发布:福州seo技巧培训 编辑:程序博客网 时间:2024/06/07 03:06
RxJava 各种操作符(1) - Creating Observables
Create, Defer, Empty/Never/Throw, From, Interval, Just, Range, Repeat, Start, and Timer
Create
- create操作符是所有创建型操作符的“根”,也就是说其他创建型操作符最后都是通过create操作符来创建Observable的.
Observable.create(new Observable.OnSubscribe() { @Override public void call (Subscriber observer){ try { if (!observer.isUnsubscribed()) { for (int i = 1; i < 5; i++) { observer.onNext(i); } observer.onCompleted(); } } catch (Exception e) { observer.onError(e); } } }).subscribe(new Subscriber() { @Override public void onNext (Integer item){ System.out.println("Next: " + item); } @Override public void onError (Throwable error){ System.err.println("Error: " + error.getMessage()); } @Override public void onCompleted () { System.out.println("Sequence complete."); } });
运行结果如下:Next: 1Next: 2Next: 3Next: 4Sequence complete.
- 在使用create操作符时,最好要在回调的call函数中增加isUnsubscribed的判断,以便在subscriber在取消订阅时不会再执行call函数中相关代码逻辑,从而避免导致一些意想不到的错误出现;
from操作符
- from操作符是把其他类型的对象和数据类型转化成Observable
Integer[] items = { 0, 1, 2, 3, 4, 5 };Observable myObservable = Observable.from(items);myObservable.subscribe( new Action1<Integer>() { @Override public void call(Integer item) { System.out.println(item); } }, new Action1<Throwable>() { @Override public void call(Throwable error) { System.out.println("Error encountered: " + error.getMessage()); } }, new Action0() { @Override public void call() { System.out.println("Sequence complete"); } });
运行结果如下:012345Sequence complete
just操作符
- just操作符也是把其他类型的对象和数据类型转化成Observable,它和from操作符很像,只是方法的参数有所差别
Observable.just(1, 2, 3) .subscribe(new Subscriber<Integer>() { @Override public void onNext(Integer item) { System.out.println("Next: " + item); } @Override public void onError(Throwable error) { System.err.println("Error: " + error.getMessage()); } @Override public void onCompleted() { System.out.println("Sequence complete."); } });
运行结果如下:Next: 1Next: 2Next: 3Sequence complete.
defer操作符
- defer操作符是直到有订阅者订阅时,才通过Observable的工厂方法创建Observable并执行,defer操作符能够保证Observable的状态是最新的.
// 下面通过比较defer操作符和just操作符的运行结果作比较: i=10; Observable justObservable = Observable.just(i); i=12; Observable deferObservable = Observable.defer(new Func0<Observable<Object>>() { @Override public Observable<Object> call() { return Observable.just(i); } }); i=15; justObservable.subscribe(new Subscriber() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { System.out.println("just result:" + o.toString()); } }); deferObservable.subscribe(new Subscriber() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { System.out.println("defer result:" + o.toString()); } }); }
其中i是类的成员变量,运行结果如下:just result:10defer result:15
可以看到,just操作符是在创建Observable就进行了赋值操作,而defer是在订阅者订阅时才创建Observable,此时才进行真正的赋值操作
timer操作符
timer操作符是创建一串连续的数字,产生这些数字的时间间隔是一定的;
一种是隔一段时间产生一个数字,然后就结束,可以理解为延迟产生数字
一种是每隔一段时间就产生一个数字,没有结束符,也就是是可以产生无限个连续的数字
timer操作符默认情况下是运行在一个新线程上的,当然你可以通过传入参数来修改其运行的线程.
//每隔两秒产生一个数字 Observable.timer(2, 2, TimeUnit.SECONDS).subscribe(new Subscriber<Long>() { @Override public void onCompleted() { System.out.println("Sequence complete."); } @Override public void onError(Throwable e) { System.out.println("error:" + e.getMessage()); } @Override public void onNext(Long aLong) { System.out.println("Next:" + aLong.toString()); } });
运行结果如下:Next:0Next:1Next:2Next:3……
interval操作符
- interval操作符是每隔一段时间就产生一个数字,这些数字从0开始,一次递增1直至无穷大;interval操作符的实现效果跟上面的timer操作符的第二种情形一样。
- interval操作符默认情况下是运行在一个新线程上的,当然你可以通过传入参数来修改其运行的线程。
调用例子就不列出了,基本跟上面timer的调用例子一样。
range操作符
- range操作符是创建一组在从n开始,个数为m的连续数字,比如range(3,10),就是创建3、4、5…12的一组数字
//产生从3开始,个数为10个的连续数字 Observable.range(3,10).subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { System.out.println("Sequence complete."); } @Override public void onError(Throwable e) { System.out.println("error:" + e.getMessage()); } @Override public void onNext(Integer i) { System.out.println("Next:" + i.toString()); } });
运行结果如下:Next:3Next:4Next:5Next:6….Next:12Sequence complete.
repeat/repeatWhen操作符
- repeat操作符是对某一个Observable,重复产生多次结果
- repeatWhen操作符是对某一个Observable,有条件地重新订阅从而产生多次结果
- repeat和repeatWhen操作符默认情况下是运行在一个新线程上的,当然你可以通过传入参数来修改其运行的线程。
repeat调用例子如下://连续产生两组(3,4,5)的数字 Observable.range(3,3).repeat(2).subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { System.out.println("Sequence complete."); } @Override public void onError(Throwable e) { System.out.println("error:" + e.getMessage()); } @Override public void onNext(Integer i) { System.out.println("Next:" + i.toString()); } });
运行结果如下:Next:3Next:4Next:5Next:3Next:4Next:5Sequence complete.
//repeatWhen调用例子如下:Observable.just(1,2,3).repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() { @Override public Observable<?> call(Observable<? extends Void> observable) { //重复3次 return observable.zipWith(Observable.range(1, 3), new Func2<Void, Integer, Integer>() { @Override public Integer call(Void aVoid, Integer integer) { return integer; } }).flatMap(new Func1<Integer, Observable<?>>() { @Override public Observable<?> call(Integer integer) { System.out.println("delay repeat the " + integer + " count"); //1秒钟重复一次 return Observable.timer(1, TimeUnit.SECONDS); } }); } }).subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { System.out.println("Sequence complete."); } @Override public void onError(Throwable e) { System.err.println("Error: " + e.getMessage()); } @Override public void onNext(Integer value) { System.out.println("Next:" + value); } });
运行结果如下:Next:1Next:2Next:3repeat the 1 countNext:1Next:2Next:3repeat the 2 countNext:1Next:2Next:3repeat the 3 countNext:1Next:2Next:3Sequence complete.
0 0
- RxJava 各种操作符(1)
- RxJava 各种操作符(1)
- RxJava 各种操作符(2、3)
- RxJava 各种操作符(2)
- RxJava 各种操作符(3)
- RxJava操作符(1)-创建
- Rxjava(2.操作符)
- [RxJava笔记]RxJava操作符
- RxJava由浅入深的学习(1)--学习路线 && Rxjava操作符的熟悉
- Android RxJava使用介绍(二) RxJava的操作符
- Android RxJava使用介绍(三) RxJava的操作符
- Android RxJava使用介绍(四) RxJava的操作符
- Android RxJava使用介绍(二) RxJava的操作符
- Android RxJava使用介绍(三) RxJava的操作符
- Android RxJava使用介绍(四) RxJava的操作符
- Android RxJava使用介绍(二) RxJava的操作符
- Android RxJava使用介绍(二) RxJava的操作符
- Android RxJava使用介绍(三) RxJava的操作符
- 创建类
- 解决/usr/bin/ld: cannot find -lxxx
- C语言指针初见(一)
- iOS UITextField
- 多目标优化算法学习
- RxJava 各种操作符(1)
- 搭建符合自己实际需求的web生产环境之java篇
- Jquery正则表达式公式.例子
- IOS 获取指定月的第一天和最后一天
- C++中的指针和引用
- JVM 学习笔记-java程序编译和运行的过程
- JAVA EE架构师 需要具备的知识
- IM相关梳理
- UITableView详解