zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    webpack源码学习总结
    并发容器(三)非阻塞队列的并发容器
    并发容器(二)阻塞队列详细介绍
    并发容器(一)同步容器 与 并发容器
    java内存模型(二)深入理解java内存模型的系列好文
    java内存模型(一)正确使用 Volatile 变量
    原子操作类(二)原子操作的实现原理
    原子操作类(一)原子操作类详细介绍
    同步锁源码分析(一)AbstractQueuedSynchronizer原理
    并发工具类(五) Phaser类
  • 原文地址:https://www.cnblogs.com/holoyong/p/9094847.html
Copyright © 2011-2022 走看看