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