RxJava concatMap操作符
2016-06-20 14:57
344 查看
concatMap 作用
concatMap操作符和flatMap操作符非常类似。下面是concatMap操作符的流程图:
concatMap和flatMap最大的区别是concatMap发射的数据集是有序的,flatMap发射的数据集是无序的。
如下代码:
Observable.from(Arrays.asList( "http://www.baidu.com/", "http://www.google.com/", "https://www.bing.com/")) .concatMap(new Func1<String, Observable<String>>() { @Override public Observable<String> call(String s) { return createIpObservableMultiThread(s); } }) .observeOn(AndroidSchedulers.mainThread()); // 获取ip private synchronized Observable<String> createIpObservableMultiThread(final String url) { return Observable .create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { try { String ip = getIPByUrl(url); printLog(tvLogs, "Emit Data -> ", url + "->" + ip); subscriber.onNext(ip); } catch (MalformedURLException e) { e.printStackTrace(); //subscriber.onError(e); subscriber.onNext(null); } catch (UnknownHostException e) { e.printStackTrace(); //subscriber.onError(e); subscriber.onNext(null); } subscriber.onCompleted(); } }) .subscribeOn(Schedulers.io()); }
执行结果:
Emit Data -> 'http://www.baidu.com/->115.239.211.112' , Main Thread:false, Thread Name:RxCachedThreadScheduler-1 Consume Data <- '115.239.211.112' , Main Thread:true, Thread Name:main Emit Data -> 'http://www.google.com/->216.58.221.132'Main Thread:false, Thread Name:RxCachedThreadScheduler-3 Emit Data -> 'https://www.bing.com/->202.89.233.104' Main Thread:false, Thread Name:RxCachedThreadScheduler-2 Consume Data <- '216.58.221.132' Main Thread:true, Thread Name:main Consume Data <- '202.89.233.104' Main Thread:true, Thread Name:main
输出的结果始终都是baidu/google/bing, 使用的线程都是不同的线程。
这也就解决了一个问题:既要是多个线程完成任务,又要保持任务的顺序。
转自:/article/11828584.html
延伸:
RxJava变换操作符:.concatMap( )与.flatMap( )的比较
相关文章推荐
- eclipse启动weblogic控制台显示乱码问题
- 继承和实现的区别?
- UML中的一些关系描述
- JAVA 读取XML文件
- 使用dom4j并利用java反射机制将对象集合写入XML
- eclipse svn检出项目为非JAVA项目
- Java 动态编译
- springmvc validator验证的使用
- 在JSP中使用JavaBean
- Java Bean、POJO、 Entity、 VO 、PO、DAO
- SpringMvc返回@ResponseBody中文乱码
- Xamarin Visual Studio不识别JDK路径
- Java中的线程执行器总结
- spring mvc 自定义方法拦截器
- JAVA学习笔记——运行我的第一个程序(day01)
- spring声明式事务管理
- Java 占位符
- Java 链接mysql数据库实现增删该查功能
- 解决Mac java.net Local host name unknown error的方法
- Xamarin Visual Studio不识别JDK路径