Scala 为什么平面图的可观察性和可观察性不同,而平面图是相同的

Scala 为什么平面图的可观察性和可观察性不同,而平面图是相同的,scala,Scala,我在看Coursera关于可见光的讲座 演讲者说,map对于Observable和Iterable的行为相同,但是flatMap的行为不同,因为Observable元素不是按顺序排列的 map的情况不是一样吗? 为什么在使用map时没有区别?这在讲座中得到了很好的解释 Iterable和Observable的映射工作原理相同,只是使用相同的函数修改每个元素 List(1,2,3)映射(uz+1)产生List(1,2,3) Observable上的map更改顺序是没有意义的,只要sourceObs

我在看Coursera关于可见光的讲座

演讲者说,
map
对于
Observable
Iterable
的行为相同,但是
flatMap
的行为不同,因为
Observable
元素不是按顺序排列的

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

这在讲座中得到了很好的解释

Iterable
Observable
的映射工作原理相同,只是使用相同的函数修改每个元素

List(1,2,3)映射(uz+1)
产生
List(1,2,3)

Observable
上的map更改顺序是没有意义的,只要source
Observable
生成一个值,mapped one就会生成一个原始值,但应用了特定的函数。秩序得以维持

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

对于
列表
,您需要的可能是

List(1, 10, 100).flatMap(n => List(n + 1, n + 2, n + 3))
高产

List(2, 3, 4, 11, 12, 13, 101, 102, 103)
List(List(2, 3, 4), List(11, 12, 13), List(101, 102, 103))
你可以把它想象成函数会产生

List(2, 3, 4, 11, 12, 13, 101, 102, 103)
List(List(2, 3, 4), List(11, 12, 13), List(101, 102, 103))
然后对它们进行浓缩(使列表变平)

如果对
可观测值
执行相同的操作,则对于每个元素,您将生成一个异步创建其值的
可观测值
,您不知道它们何时出现。所以基本上你会有3个观测值:

Observable(2, 3, 4), Observable(11, 12, 13), Observable(101, 102, 103)
当它们被合并时,你不知道元素的顺序是什么,你只能确定3在4之前,102在103之前,但不能确定它是从11开始,还是从2开始,或者从101开始

这就是为什么
Iterables
flatMap
的工作方式与
可观察对象的工作方式不同的原因。在
Iterables
上,顺序是确定的,但是对于
可观察对象
您无法确定元素的顺序。这正是图片所显示的


在最后一块绿色大理石之前出现了一块蓝色大理石。对于
Iterables,情况并非如此,按此顺序,您将有2个红色、2个绿色和2个蓝色。

在讲座中对此进行了很好的解释

Iterable
Observable
的映射工作原理相同,只是使用相同的函数修改每个元素

List(1,2,3)映射(uz+1)
产生
List(1,2,3)

Observable
上的map更改顺序是没有意义的,只要source
Observable
生成一个值,mapped one就会生成一个原始值,但应用了特定的函数。秩序得以维持

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

对于
列表
,您需要的可能是

List(1, 10, 100).flatMap(n => List(n + 1, n + 2, n + 3))
高产

List(2, 3, 4, 11, 12, 13, 101, 102, 103)
List(List(2, 3, 4), List(11, 12, 13), List(101, 102, 103))
你可以把它想象成函数会产生

List(2, 3, 4, 11, 12, 13, 101, 102, 103)
List(List(2, 3, 4), List(11, 12, 13), List(101, 102, 103))
然后对它们进行浓缩(使列表变平)

如果对
可观测值
执行相同的操作,则对于每个元素,您将生成一个异步创建其值的
可观测值
,您不知道它们何时出现。所以基本上你会有3个观测值:

Observable(2, 3, 4), Observable(11, 12, 13), Observable(101, 102, 103)
当它们被合并时,你不知道元素的顺序是什么,你只能确定3在4之前,102在103之前,但不能确定它是从11开始,还是从2开始,或者从101开始

这就是为什么
Iterables
flatMap
的工作方式与
可观察对象的工作方式不同的原因。在
Iterables
上,顺序是确定的,但是对于
可观察对象
您无法确定元素的顺序。这正是图片所显示的


在最后一块绿色大理石之前出现了一块蓝色大理石。“Iterables”的情况并非如此,按此顺序,您将有2个红色、2个绿色和2个蓝色。

您能详细说明他所说的“相同”是什么意思吗?它们的一元类型是相同的,但它们的实际行为明显不同(因为它们作用于不同的事物)。通过
same
,我的意思是,在这两种情况下,结果都是异步的,因此不能排序。flatmap是关于将观测值链接在一起的。map()是关于改变一个可观察的结果类型的。你能详细解释一下他所说的“相同”是什么意思吗?它们的一元类型是相同的,但它们的实际行为明显不同(因为它们作用于不同的事物)。通过
same
,我的意思是,在这两种情况下,结果都是异步的,因此不能排序。flatmap是关于将观测值链接在一起的。而map()是关于更改可观察对象的结果类型。