Mathematical and Aggregate Operators

本文的主题为处理 Observable 的聚合操作符。

这里的 Observable 实质上是可观察的数据流。

RxJava操作符(八)Aggregate

公共代码

  • RxNET
  1. public static void Dump<T>(this IObservable<T> source, string name)
  2. {
  3. source.Subscribe(
  4. i => Console.WriteLine("{0}-->{1}", name, i),
  5. ex => Console.WriteLine("{0} failed-->{1}", name, ex.Message),
  6. () => Console.WriteLine("{0} completed", name));
  7. }

Average

ReactiveX - Average operator

Reactive Extensions再入門 その16「最大、最少、平均を求めるメソッド」

Average 计算源数据流所有数据的平均值,然后发送这个平均值。

  • RxNET
  1. var s = new Subject<int>();
  2. s.Average().Subscribe(avg =>
  3. {
  4. Console.WriteLine("Average {0}", avg);
  5. },
  6. () => Console.WriteLine("Average Completed"));
  7. Console.WriteLine("OnNext(1-3)");
  8. s.OnNext(1);
  9. s.OnNext(2);
  10. s.OnNext(3);
  11. Console.WriteLine("OnCompleted()");
  12. s.OnCompleted();
  13. /*
  14. OnNext(1-3)
  15. OnCompleted()
  16. Average 2
  17. Average Completed
  18. */

Concat

ReactiveX - Concat operator

Reactive Extensions再入門 その41「どんどん合成するよ」

Concat 合并数据流,按照数据流的连接顺序依次发送各个数据流的数据。

给定两个数据流 A 和 B,Concat(A, B) 会先发送 A 中的数据,等到 A 中的数据全部发送完毕后再发送 B 中的数据。多个数据流也以此类推。

  • RxNET
  1. var s1 = Observable.Range(0, 3);
  2. var s2 = Observable.Range(5, 5);
  3. s1.Concat(s2)
  4. .Subscribe(Console.WriteLine);
  5. /*
  6. 0
  7. 1
  8. 2
  9. 5
  10. 6
  11. 7
  12. 8
  13. 9
  14. */
  1. private static IEnumerable<IObservable<long>> GetSequences()
  2. {
  3. Console.WriteLine("GetSequences() called");
  4. Console.WriteLine("Yield 1st sequence");
  5. yield return Observable.Create<long>(o =>
  6. {
  7. Console.WriteLine("1st subscribed to");
  8. return Observable.Timer(TimeSpan.FromMilliseconds(500))
  9. .Select(i => 1L)
  10. .Subscribe(o);
  11. });
  12. Console.WriteLine("Yield 2nd sequence");
  13. yield return Observable.Create<long>(o =>
  14. {
  15. Console.WriteLine("2nd subscribed to");
  16. return Observable.Timer(TimeSpan.FromMilliseconds(300))
  17. .Select(i => 2L)
  18. .Subscribe(o);
  19. });
  20. Thread.Sleep(1000); //Force a delay
  21. Console.WriteLine("Yield 3rd sequence");
  22. yield return Observable.Create<long>(o =>
  23. {
  24. Console.WriteLine("3rd subscribed to");
  25. return Observable.Timer(TimeSpan.FromMilliseconds(100))
  26. .Select(i => 3L)
  27. .Subscribe(o);
  28. });
  29. Console.WriteLine("GetSequences() complete");
  30. }
  31. GetSequences().Concat().Dump("Concat");
  32. /*
  33. GetSequences() called
  34. Yield 1st sequence
  35. 1st subscribed to
  36. Concat-->1
  37. Yield 2nd sequence
  38. 2nd subscribed to
  39. Concat-->2
  40. Yield 3rd sequence
  41. 3rd subscribed to
  42. Concat-->3
  43. GetSequences() complete
  44. Concat completed
  45. */
  • RxJava
  1. val seq1 = Observable.range(0, 3)
  2. val seq2 = Observable.range(10, 3)
  3. Observable.concat(seq1, seq2)
  4. .dump()
  5. /*
  6. onNext: 0
  7. onNext: 1
  8. onNext: 2
  9. onNext: 10
  10. onNext: 11
  11. onNext: 12
  12. onComplete
  13. */
  1. val words = Observable.just(
  2. "First",
  3. "Second",
  4. "Third",
  5. "Fourth",
  6. "Fifth",
  7. "Sixth"
  8. )
  9. Observable.concat(words.groupBy { v -> v[0] })
  10. .dump()
  11. /*
  12. onNext: First
  13. onNext: Fourth
  14. onNext: Fifth
  15. onNext: Second
  16. onNext: Sixth
  17. onNext: Third
  18. onComplete
  19. */
  1. val seq1 = Observable.range(0, 3)
  2. val seq2 = Observable.range(10, 3)
  3. val seq3 = Observable.just(20)
  4. seq1.concatWith(seq2)
  5. .concatWith(seq3)
  6. .dump()
  7. /*
  8. onNext: 0
  9. onNext: 1
  10. onNext: 2
  11. onNext: 10
  12. onNext: 11
  13. onNext: 12
  14. onNext: 20
  15. onComplete
  16. */
  • RxSwift
  1. let disposeBag = DisposeBag()
  2. let subject1 = BehaviorSubject(value: "
  3. ReactiveX 学习笔记(7)聚合操作符的更多相关文章

      1. ReactiveX 学习笔记(0)学习资源
      1. ReactiveX 学习笔记 ReactiveX 学习笔记(1) ReactiveX 学习笔记(2)创建数据流 ReactiveX 学习笔记(3)转换数据流 ReactiveX 学习笔记(4)过滤数据 ...

      1. python3.4学习笔记(十) 常用操作符,条件分支和循环实例
      1. python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...

      1. matlab学习笔记10_2 一般操作符
      1. 一起来学matlab-matlab学习笔记10 10_2一般操作符和数据显示格式 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德 ...

      1. Prometheus监控学习笔记之PromQL操作符
      1. 0x00 二元运算符 Prometheus 的查询语言支持基本的逻辑运算和算术运算.对于两个瞬时向量, 匹配行为可以被改变. 算术二元运算符 在 Prometheus 系统中支持下面的二元算术运算符: ...

      1. ReactiveX 学习笔记(9)工具类操作符
      1. Observable Utility Operators 本文的主题为处理 Observable 的实用工具类操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(六) ...

      1. ReactiveX 学习笔记(8)错误处理和 To 操作符
      1. Error Handling Operators Operators to Convert Observables 本文的主题为对 Observable 进行错误处理的操作符以及转换 Observab ...

      1. ReactiveX 学习笔记(6)条件操作符
      1. Conditional and Boolean Operators 本文的主题为处理 Observable 的条件和布尔操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操 ...

      1. ReactiveX 学习笔记(30)操作符辨析
      1. RxJava: merge/concat/switch RxJS: merge/concat/switch/exhaust RxSwift: merge/concat/switchLatest mer ...

      1. ReactiveX 学习笔记(12)调度器
      1. Schedulers, threading and testing 本文的主题为调度器,多线程以及测试. RxJava操作符(六)Utility SubscribeOn / ObserveOn Sub ...

    1. 随机推荐

        1. MySQL分布式实现ID自增
        1. 由于数据量以及IO效率的因素,很多项目对数据支持的数据库会采取分库分表的方式.使用了分库分表之后需要解决的一个问题就是主键的生成.多个表之间的主键就不能用数据库本身的自增主键来支持,因为不同表之间生成 ...

        1. Java IO网络编程经典模板
        1. 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...

        1. 0001 - Spring 框架和 Tomcat 容器扩展接口揭秘
        1. 前言 在 Spring 框架中,每个应用程序上下文(ApplicationContext)管理着一个 BeanFactory,BeanFactory 主要负责 Bean 定义的保存.Bean 的创建. ...

        1. PLMN概念和应用设置
        1. PLMN概念和应用设置   1 PLMN概念 PLMN: PLMN(Public Land Mobile Network,公共陆地移动网络) 该网路必须与公众交换电话网(PSTN)互连,形成整个地区或 ...

        1. (转)Java调用Weservice
        1. 原文地址:http://www.cnblogs.com/jiangxu1989/p/6491483.html https://www.cnblogs.com/neughj/p/5145630.html ...

        1. Qt Opengl
        1. 目前在Qt5中做Opengl的学习时候,发现gluPerspective函数没有定义. 1: gluPerspective( 45.0, (GLfloat)width/(GLfloat)height, ...

        1. Django中的路由系统:urls
        1. Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是以这种方式告诉Django,对于这个URL调用 ...

        1. redis永久化存储
        1. redis持久化存储 原因:redis是存放在内存中的,断电会导致数据丢失解决方法:把redis数据进行持久性存储,将其存储在磁盘中. 存储方式:1.RDBRDB中文名为快照/内存快照,Redis按照 ...

        1. es6基础(7)--函数扩展
        1. { //有默认值的后面如果有参数必须要有默认值 function test(x,y="world"){ console.log(x,y) } test('hello');//hel ...

        1. mysql 5.6 解压缩版安装教程
        1. MySQL 5.6 for Windows 解压缩版配置安装 听语音 | 浏览:68011 | 更新:2014-03-05 12:28 | 标签:mysql 1 2 3 4 5 6 7 分步阅读 My ...