RxJava转换操作符 conactMap
来源:互联网 发布:算法设计与分析的认识 编辑:程序博客网 时间:2024/05/21 23:33
concatMap操作符是将源Observable转换成对各操作符,然后又链接返回给源Observable,这与flatMap十分相似,最大的区别:concatMap 是保证结果的顺序性,就是顺序与输入一致.
例子:在这里最大的数线程延迟最长,照理应该是最大的数最后出来,结果很意外:
<pre name="code" class="java"> Observable.just(2, 1).concatMap(new Func1<Integer, Observable<Integer>>() { @Override public Observable<Integer> call(final Integer integer) { return Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { if (subscriber.isUnsubscribed()) return; try { LogUtils.d("------>thread:" + Thread.currentThread().getName()); Thread.currentThread().sleep(TimeUnit.SECONDS.toMillis(integer)); subscriber.onNext(integer); subscriber.onCompleted(); } catch (InterruptedException e) { e.printStackTrace(); subscriber.onError(e); } } }).subscribeOn(Schedulers.newThread()); } }).subscribe(new Observer<Integer>() { @Override public void onCompleted() { LogUtils.d("------>onCompleted()"); } @Override public void onError(Throwable e) { LogUtils.d("------>onError()" + e); } @Override public void onNext(Integer aLong) { LogUtils.d("------>onNext:" + aLong); } });
结果:
02-26 15:22:03.028 25684-25832/? D/----->: ------>thread:RxNewThreadScheduler-102-26 15:22:05.028 25684-25832/? D/----->: ------>onNext:202-26 15:22:05.038 25684-25864/? D/----->: ------>thread:RxNewThreadScheduler-202-26 15:22:06.038 25684-25864/? D/----->: ------>onNext:102-26 15:22:06.038 25684-25864/? D/----->: ------>onCompleted()
这更加说明了concatMap 的顺序保障
同时区分faltMap:这里用flatMap演示:
Observable.just(2, 1).flatMap(new Func1<Integer, Observable<Integer>>() { @Override public Observable<Integer> call(final Integer integer) { return Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { if (subscriber.isUnsubscribed()) return; try { LogUtils.d("------>thread:" + Thread.currentThread().getName()); Thread.currentThread().sleep(TimeUnit.SECONDS.toMillis(integer)); subscriber.onNext(integer); subscriber.onCompleted(); } catch (InterruptedException e) { e.printStackTrace(); subscriber.onError(e); } } }).subscribeOn(Schedulers.newThread()); } }).subscribe(new Observer<Integer>() { @Override public void onCompleted() { LogUtils.d("------>onCompleted()"); } @Override public void onError(Throwable e) { LogUtils.d("------>onError()" + e); } @Override public void onNext(Integer aLong) { LogUtils.d("------>onNext:" + aLong); } });
结果:
02-26 15:23:07.108 26612-26795/com.rxandroid.test1 D/----->: ------>thread:RxNewThreadScheduler-1
02-26 15:23:07.108 26612-26796/com.rxandroid.test1 D/----->: ------>thread:RxNewThreadScheduler-2
02-26 15:23:08.108 26612-26796/com.rxandroid.test1 D/----->: ------>onNext:1
02-26 15:23:09.108 26612-26795/com.rxandroid.test1 D/----->: ------>onNext:2
02-26 15:23:09.108 26612-26795/com.rxandroid.test1 D/----->: ------>onCompleted()
在这里,flatmap 并未保证顺序性!
1 0
- RxJava转换操作符 conactMap
- RxJava转换操作符
- Rxjava 转换操作符
- RxJava 转换操作符 buffer
- RxJava 转换操作符 flatMap
- RxJava 转换操作符 switchMap
- RxJava 转换操作符groupBy
- RxJava 转换操作符scan
- RxJava转换操作符cast
- RxJava转换操作符window
- RxJava之转换操作符
- RxJava转换类型操作符
- RxJava—转换操作符
- RxJava----操作符:转换操作符
- RxJava系列3(转换操作符)
- RxJava系列3(转换操作符)
- RxJava使用详解--转换操作符
- RxJava学习之转换型操作符
- Java异常原因及解决方法汇总一
- 【PA2009】【BZOJ3498】Cakes
- Java 使用jxls导出小数据量excel文件
- JVM 内存分配和回收
- maven管理项目如何查找jar依赖
- RxJava转换操作符 conactMap
- Java操作FTP(1)
- iOS WebSocket数据包协议详解
- 探索大型网站技术架构(二)
- linux 安装jdk
- 性能优化
- Redis+Sentinel安装与配置
- JAVA学习【7】集合框架与Arraylist、Linkedlist、HashSet的基本用法
- 20160225 C/C++,Win32,MFC文件操作简单总结