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

  • 相关阅读:
    Firefox常用web开发插件
    引用MFC指针的获取(转载)
    J2EE的13种核心技术(转载)
    用Visio画ER图的解决方案(转载)
    [导入]六一
    [导入]独自等待
    [导入]随想
    [导入]小聚
    [导入]网站需求分析
    [导入]如何做好网站开发项目需求分析
  • 原文地址:https://www.cnblogs.com/holoyong/p/9094847.html
Copyright © 2011-2022 走看看