ReactiveX-简介

ReactiveX是一个API,它有很多实现。

Observable补充了异步遍历的空白

 single itemsmultiple items
synchronousT getData()Iterable<T> getData()
asynchronousFuture<T> getData()Observable<T> getData()

如果将Iterable看成是pull模式(因为是consumer阻塞向producer拉数据),Observable则是push模式(producer主动推数据给consumer)

eventIterable (pull)Observable (push)
retrieve dataT next()onNext(T)
discover errorthrows ExceptiononError(Exception)
complete!hasNext()onCompleted()

 

对于下例getData方法来说,Observable可以有很多实现,但对于Observer来说如何实现并不重要。

public Observable<data> getData();

 

Iterable代码示例

getDataFromLocalMemory()
  .skip(10)
  .take(5)
  .map({ s -> return s + " transformed" })
  .forEach({ println "next => " + it })

 Observable代码示例

getDataFromNetwork()
  .skip(10)
  .take(5)
  .map({ s -> return s + " transformed" })
  .subscribe({ println "onNext => " + it })

 

来简单看一下java8的

java8带来了Stream接口,其拥有的方法比如:filter、skip、map、reduce等

 1 List<Double> origin = Arrays.asList(10.0, 20.0,30.0);
 2 //java8中Collection接口新增了stream方法,它有default逻辑
 3 //return StreamSupport.stream(spliterator(), false);
 4 //可以猜测返回的Stream对象中会存在一个spliterator关联
 5 Stream<Double> stream = origin.stream();
 6 //map操作并不会立即执行,而是会将原Stream包装成一个新的stream,该stream中就含有map逻辑
 7 Stream<Double> mapStream = stream.map(x -> x + x * 0.05);
 8 //reduce属于终端操作,此时就会完成之前的stream操作,最终产生结果。
 9 //可以猜测,Stream内部会有一个数据源(spliterator),还应该通过一个链式结构维护着每一个流的中间操作,在调用终端操作时,会顺着这个链来执行。
10 Optional<Double> reduce = mapStream.reduce((sum, x) -> sum + x);
11 double result = reduce.orElse(0.0);

 

 

 

 

参考:http://reactivex.io/intro.html

转载于:https://www.cnblogs.com/holoyong/p/9094847.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值