我正在查看 RXJava 的文档,我注意到 concat 和 merge 运算符似乎做同样的事情。我写了几个测试来确定。
@Test
public void testContact() {
Observable.concat(Observable.just("Hello"),
Observable.just("reactive"),
Observable.just("world"))
.subscribe(System.out::println);
}
@Test
public void testMerge() {
Observable.merge(Observable.just("Hello"),
Observable.just("reactive"),
Observable.just("world"))
.subscribe(System.out::println);
}
文件说
Merge 运算符也类似。它结合了两个或多个 Observable 的发射,但可以交错它们,而 Concat 从不交错多个 Observable 的发射。
但我还是不完全明白,运行此测试数千次合并结果总是相同的。由于未授予订单,因此我有时会期待“反应性”“世界”“你好”。
代码在这里 https://github.com/politrons/reactive
原文由 paul 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如您引用的文档中所述 - merge 可以交错输出,而 concat 将首先等待较早的流完成,然后再处理后面的流。在您的情况下,对于单元素静态流,它没有任何真正的区别(但理论上,合并可以随机顺序输出单词,并且根据规范仍然有效)。如果您想看到差异,请尝试以下操作(之后您需要添加一些睡眠以避免提前退出)
相对
Concat 永远不会开始打印 B,因为流 A 永远不会结束。
s/流/可观察/g ;)
文档提供了漂亮的图表来显示差异。您需要记住,合并并不能 保证 一个一个地交错项目,它只是一个可能的例子。
连续