ReactiveX 学习笔记(5)合并数据流
Combining Observables
本文的主题为合并 Observable 的操作符。
这里的 Observable 实质上是可观察的数据流。
And/Then/When
ReactiveX - And/Then/When operator
Reactive Extensions再入門 その44「And, Then, Whenメソッド」
And/Then/When 将两个或多个数据流的数据通过 Pattern 和 Plan 中间量合为一体。
And/Then/When 操作符中数据结合的方法为将所有源数据流的第 1 个数据结合,然后再将所有源数据流的第 2 个数据结合,以此类推,直到某一个源数据流没有数据为止。

- RxNET
var one = Observable.Interval(TimeSpan.FromSeconds(1)).Take(5);
var two = Observable.Interval(TimeSpan.FromMilliseconds(250)).Take(10);
var three = Observable.Interval(TimeSpan.FromMilliseconds(150)).Take(14);
var zippedSequence = Observable.When(
one.And(two)
.And(three)
.Then((first, second, third) =>
new {
One = first,
Two = second,
Three = third
})
);
zippedSequence.Subscribe(
Console.WriteLine,
() => Console.WriteLine("Completed"));
Console.ReadLine();
/*
{ One = 0, Two = 0, Three = 0 }
{ One = 1, Two = 1, Three = 1 }
{ One = 2, Two = 2, Three = 2 }
{ One = 3, Two = 3, Three = 3 }
{ One = 4, Two = 4, Three = 4 }
Completed
*/
CombineLatest
ReactiveX - CombineLatest operator
Reactive Extensions再入門 その41「どんどん合成するよ」
CombineLatest 将两个数据流中的最新数据通过调用指定函数合为一体。

- RxNET
var source1 = new Subject<string>();
var source2 = new Subject<int>();
source1
.CombineLatest(
source2,
(l, r) => string.Format("{0}-{1}", l, r))
.Subscribe(
s => Console.WriteLine("OnNext: {0}", s),
() => Console.WriteLine("OnCompleted"));
Console.WriteLine("source1.OnNext(foo)");
source1.OnNext("foo");
Console.WriteLine("source2.OnNext(100)");
source2.OnNext(100);
Console.WriteLine("source2.OnNext(200)");
source2.OnNext(200);
Console.WriteLine("source1.OnNext(bar)");
source1.OnNext("bar");
Console.WriteLine("source1.OnNext(boo)");
source1.OnNext("boo");
Console.WriteLine("source1.OnCompleted()");
source1.OnCompleted();
Console.WriteLine("source2.OnNext(999)");
source2.OnNext(999);
Console.WriteLine("source2.OnCompleted()");
source2.OnCompleted();
/*
source1.OnNext(foo)
source2.OnNext(100)
OnNext: foo-100
source2.OnNext(200)
OnNext: foo-200
source1.OnNext(bar)
OnNext: bar-200
source1.OnNext(boo)
OnNext: boo-200
source1.OnCompleted()
source2.OnNext(999)
OnNext: boo-999
source2.OnCompleted()
OnCompleted
*/
- RxJava
Observables.combineLatest(
Observable.interval(100, TimeUnit.MILLISECONDS)
.doOnNext { i -> println("Left emits") },
Observable.interval(150, TimeUnit.MILLISECONDS)
.doOnNext { i -> println("Right emits") })
{ i1, i2 -> i1.toString() + " - " + i2 }
.take(6)
.dump()
/*
Left emits
Right emits
onNext: 0 - 0
Left emits
onNext: 1 - 0
Left emits
Right emits
onNext: 2 - 0
onNext: 2 - 1
Left emits
onNext: 3 - 1
Right emits
onNext: 3 - 2
onComplete
*/
- RxSwift
let disposeBag = DisposeBag()
let stringSubject = PublishSubject<String>()
let intSubject = PublishSubject<Int>()
Observable.combineLatest(stringSubject, intSubject) { stringElement, intElement in
"\(stringElement) \(intElement)"
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
stringSubject.onNext("
ReactiveX 学习笔记(5)合并数据流的更多相关文章
- ReactiveX 学习笔记(0)学习资源
ReactiveX 学习笔记 ReactiveX 学习笔记(1) ReactiveX 学习笔记(2)创建数据流 ReactiveX 学习笔记(3)转换数据流 ReactiveX 学习笔记(4)过滤数据 ...
- ReactiveX 学习笔记(7)聚合操作符
Mathematical and Aggregate Operators 本文的主题为处理 Observable 的聚合操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操 ...
- ReactiveX 学习笔记(3)转换数据流
Transforming Observables 本文的主题为转换 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(二)Transform ...
- ReactiveX 学习笔记(10)可连接的数据流
Connectable Observable Operators 本文的主题为处理 Connectable Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. R ...
- ReactiveX 学习笔记(4)过滤数据流
Filtering Observables 本文主题为过滤 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(三)Filtering Deb ...
- ReactiveX 学习笔记(2)创建数据流
操作符(Operators) Rx 的操作符能够操作(创建/转换/组合) Observable. Creating Observables 本文主题为创建/生成 Observable 的操作符. 这里 ...
- ReactiveX 学习笔记(12)调度器
Schedulers, threading and testing 本文的主题为调度器,多线程以及测试. RxJava操作符(六)Utility SubscribeOn / ObserveOn Sub ...
- ReactiveX 学习笔记(9)工具类操作符
Observable Utility Operators 本文的主题为处理 Observable 的实用工具类操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(六) ...
- ReactiveX 学习笔记(8)错误处理和 To 操作符
Error Handling Operators Operators to Convert Observables 本文的主题为对 Observable 进行错误处理的操作符以及转换 Observab ...
随机推荐
- echarts饼图配置
js引用和配置div <div id="container" style="height: 100%"></div> <scrip ...
- SAS infile 导入txt示例
概要说明: 以下代码包含的知识点: 1)ods 2)format picture 3)symputx ods pdf file="D:\fgroup\users\output\time.pd ...
- MyBatis 工作原理
参考链接: 深入理解Mybatis原理:http://blog.csdn.net/luanlouis/article/details/40422941 MyBatis原理:http://www.jia ...
- Delphi StringGrid控件的用法
Delphi StringGrid控件 组件名称:StringGrid ●固定行及固定列: StringGrid.FixedCols:=固定行之数; StringGrid.Fixe ...
- CS229 7.1应用机器学习中的一些技巧
本文所讲述的是怎么样去在实践中更好的应用机器学习算法,比如如下经验风险最小化问题: 当求解最优的 后,发现他的预测误差非常之大,接下来如何处理来使得当前的误差尽可能的小呢?这里给出以下几个选项,下面 ...
- Android转场动画,Avtivity转场动画;
转场动画 - 共享元素动画 先看效果: Activity1点击小图标开启Activity2: 开启Activity2效果就像是小图标放大了填充上去的,关闭Activity2回到Activity1时又像 ...
- SpringBoot 实现前后端分离的跨域访问(CORS)
序言:跨域资源共享向来都是热门的需求,使用CORS可以帮助我们快速实现跨域访问,只需在服务端进行授权即可,无需在前端添加额外设置,比传统的JSONP跨域更安全和便捷. 一.基本介绍 简单来说,CORS ...
- ant编译时提示一大堆软件包不存在的问题
ant编译时提示一大堆软件包不存在的问题 解决方案: 把项目的 lib 里的jar包 放的 jdk的jre的ext的目录下 例如 java home 是 D:JavaEEJavajdk1.8.0_1 ...
- python协程的使用
1.Python对协程的支持是通过generator(生成器 yield)实现的.协程执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行. 2.调用生成器运行的过程中 ...
- 1.正则re
正则 :规则表达式 一般在匹配非结构化的数据时用的比较多,结构化的数据一般用xpath,bs4.但具体使用起来都是视情况而定,相对而言.正则规则平时涉及最多也就是匹配邮箱,电话,及特殊字符串.规则相对 ...