RxJava使用介绍
来源:互联网 发布:阿里云 cdn 清除缓存 编辑:程序博客网 时间:2024/05/01 16:09
RxJava介绍
RxJava 是一个响应式编程框架,采用观察者设计模式。所以自然少不了 Observable 和 Subscriber 这两个东东了。用于通过使用观察序列构成异步和基于事件的程序库.
RxJava 是一个开源项目,地址:https://github.com/ReactiveX/RxJava
RxJava 扩展了观察者模式,以支持数据、事件序列,并增加了参数,让你编写的序列一起同时申明抽象事物,如低级别的线程、同步,提高线程安全和避免因为并发导致的数据担忧;
Java
public static void hello(String... names) { Observable.from(names).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println("Hello " + s + "!"); } });}
输出
hello("Ben", "George");Hello Ben!Hello George!
基础知识
响应式代码的基本组成部分是Observables和Subscribers(事实上Observer才是最小的构建块,但实践中使用最多的是Subscriber,因为Subscriber才是和Observables的对应的。)。Observable发送消息,而Subscriber则用于消费消息。
消息的发送是有固定模式的。Observable可以发送任意数量的消息(包括空消息),当消息被成功处理或者出错时,流程结束。Observable会调用它的每个Subscriber的Subscriber.onNext()函数,并最终以Subscriber.onComplete()或者Subscriber.onError()结束。
这看起来像标准的观察者模式,但不同的一个关键点是:Observables一般只有等到有Subscriber订阅它,才会开始发送消息(术语上讲就是热启动Observable和冷启动Observable。热启动Observable任何时候都会发送消息,即使没有任何观察者监听它。冷启动Observable只有在至少有一个订阅者的时候才会发送消息(我的例子中都是只有一个订阅者)。这个区别对于开始学习RxJava来说并不重要。)。换句话说,如果没有订阅者观察它,那么将不会起什么作用。
如何设计使用RXJAVA
使用RxJava创建观测者(其中操作参数),变换各种方式的观测者,以获得精确的数据项你感兴趣的(通过使用可观察到的参数),然后观察,并实施观察员反应的有趣的项目,这些序列(或订户然后订阅他们得到的变换观测者)。
添加
Maven
<dependency> <groupId>io.reactivex</groupId> <artifactId>rxjava</artifactId> <version>x.y.z</version></dependency>
Ivy
<dependency org="io.reactivex" name="rxjava" rev="x.y.z" />
实际项目代码举例程序:
List<Map> paraList = new ArrayList<Map>(); paraList = (List<Map>) map.get("paraMap"); for (Map paraMap : paraList) { Iterator<String> mapIter = map.keySet().iterator(); while (mapIter.hasNext()) { String key = mapIter.next(); if (map.get(key) instanceof String) { paraMap.put(key, map.get(key)); } } } final List<Map> resultList = new ArrayList<Map>(); //Func1(from,to) Observable.from(paraList).parallel(new Func1<Observable<Map>, Observable<Map>>() { @Override public Observable<Map> call(Observable<Map> request) { return request.map(new Func1<Map, Map>() { @Override public Map call(Map paraMap) { Map resultMap = new HashMap(); try { resultMap = commonCalculateQueryService.commonCalculate(paraMap); } catch (Exception e) { logger.debug(" execute Query : " + e.toString()); Map exceptionMap = new HashMap(); exceptionMap.put("request_uuid", (String) paraMap.get("requestUuid")); exceptionMap.put("process_unit", Result.NOR); exceptionMap.put("exception_text", e.toString()); exceptionMap.put("insert_by", "Lenvon"); commonCalculateQueryService.insertResultProcessException(exceptionMap); resultMap.put("replyCode", ReplyCode.ERROR); resultMap.put("replyText", e.toString()); resultMap.put("status", StatusCode.N); logger.error(" FreightCalculator Exception : ", e); } return resultMap; } }); } }, Schedulers.threadPoolForComputation()).toBlockingObservable().forEach(new Action1<Map>() { @Override public void call(Map resultMap) { resultList.add(resultMap); } });
其中
paraList:操作参数队列;
resultList:结果队列;
实际处理图序:
- RxJava使用介绍
- RxJava介绍和使用
- RxJava使用介绍-概念
- Rxjava的介绍与使用
- RxJava RxAndroid基本使用介绍
- RxJava RxAndroid基本使用介绍
- 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的操作符
- Android RxJava使用介绍(四) RxJava的操作符
- Android RxJava使用介绍(三) RxJava的操作符
- RxJava系列2(基本概念及使用介绍)
- hdu1686 Oulipo
- vector_construct_interator;delete为什么能识别free内存大小
- 奔跑吧兄弟第二季QQ中奖是不是真的吗?
- linux命令2--chgrp命令
- nginx配置静态文件目录,压缩传输
- RxJava使用介绍
- HDOJ 1021 Fibonacci Again
- 关于extjs5.0下的mixins
- hdu 1690 Bus System
- (Java实现)HTML页面转PDF解决方案
- 使用excel进行数据挖掘(2)----分析关键影响因素
- tar 压缩与解压缩打包命令
- C/C++文件读取报错:stack around the variable 'x' was corrupted.
- leetcode[169]:Majority Element