ReactiveX-简介

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

Observable补充了异步遍历的空白

  single items multiple items
synchronous T getData() Iterable<T> getData()
asynchronous Future<T> getData() Observable<T> getData()

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

event Iterable (pull) Observable (push)
retrieve data T next() onNext(T)
discover error throws Exception onError(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

posted @ 2018-05-27 00:17  holoyong  阅读(341)  评论(0编辑  收藏  举报