• 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

  • 相关阅读:
    简简单单右键菜单
    近期的一些更新
    XGCalendar Demo中的表结果说明
    基于jQuery的GridViewFlexigrid(2)扩展和修复
    XgCalendar 代码导读和Demo详解(1)参数说明和数据结构
    Google 开发了内部Javascript开发工具和类库
    基于jQuery的GridViewFlexiGrid的使用和改造(1)如何使用,完全参数说明
    JAVA简单冒泡排序算法
    JAVA链表简单实现
    JAVA顺序表的简单实现
  • 原文地址:https://www.cnblogs.com/holoyong/p/9094847.html
Copyright © 2020-2023  润新知