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