首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么flatMap在可观测性和可测性方面是不同的,而地图是相同的

为什么flatMap在可观测性和可测性方面是不同的,而地图是相同的
EN

Stack Overflow用户
提问于 2016-03-28 14:47:12
回答 1查看 168关注 0票数 1

我在看https://class.coursera.org/reactive-002/lecture/143关于可观察性的讲座。

这位讲师说,map对于ObservableIterable的行为是一样的,但是flatMap的行为不同,因为Observable元素没有按顺序排列。

map来说不是同样的情况吗?为什么在使用map时没有区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-28 15:27:11

这在讲座中解释得很好。

IterableObservable的映射工作相同,只需使用相同的函数修改每个元素。

List(1, 2, 3) map (_ + 1)产生List(1, 2, 3)

Observable上的地图更改顺序是没有意义的,只要源Observable生成一个值,映射的映射就产生一个原始值,但是有特定的函数应用到它。秩序得到了维护。

但是,flatMap接受一个函数A => Observable[A],因此对于每个元素,它将创建另一个Observable

你对List的看法可能是

代码语言:javascript
复制
List(1, 10, 100).flatMap(n => List(n + 1, n + 2, n + 3))

产额

代码语言:javascript
复制
List(2, 3, 4, 11, 12, 13, 101, 102, 103)

你可以这样想,就好像这个函数会产生

代码语言:javascript
复制
List(List(2, 3, 4), List(11, 12, 13), List(101, 102, 103))

然后把他们连在一起(把名单弄平)。

如果要对Observables执行同样的操作,对于每个元素,您将生成一个异步创建其值的Observable,您不知道它们何时会出现。所以从本质上说,你有三个可观察到的:

代码语言:javascript
复制
Observable(2, 3, 4), Observable(11, 12, 13), Observable(101, 102, 103)

当它们被合并时,你不知道元素的顺序是什么,你只能确定3在4之前,102在103之前,而不是它是从11开始还是从2开始,还是从101开始。

这就是为什么flatMap for IterablesObservables不同的原因。在Iterables上,顺序是确定的,但是对于Observables,您不能确定元素的顺序。这正是这张照片所显示的

在最后一颗绿色大理石之前,有一个蓝色的游行队伍来到了这里。Iterables的情况并非如此,在这个顺序中,您将有2个红色、2个绿色和2个蓝色。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36264730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档