stream.flatmap
是map
和flat
操作的组合。这意味着您首先将一个函数应用到您的元素上,然后将其扁平化。stream.map
仅将函数应用于流,而不将流扁平化。
要理解流扁平化的内容,请考虑一个类似[[1,2,3],[4,5,6],[7,8,9]]
的结构,它具有“两个级别”。扁平化意味着将其转换为“一个层次”的结构:[1,2,3,4,5,6,7,8,9]
。
map
和flatmap
都可以应用于流
并且它们都返回流
。不同的是,map
操作为每个输入值生成一个输出值,而flatmap
操作为每个输入值生成任意数量(零或更多)的值。
这反映在每个操作的参数中。
map
操作采用一个function
,该函数为输入流中的每个值调用,并生成一个结果值,该结果值被发送到输出流。
flatmap
操作接受一个函数,该函数在概念上希望使用一个值并生成任意数量的值。然而,在Java中,一个方法返回任意数量的值是很麻烦的,因为方法只能返回零或一个值。可以想象一个API,其中flatmap
的映射器函数接受一个值,并返回一个数组或一个list
值,然后将这些值发送到输出。假设这是streams库,表示任意数量的返回值的一种特别恰当的方法是让映射器函数本身返回一个流!映射器返回的流中的值将从流中排出并传递给输出流。每次调用映射器函数返回的值的“簇”在输出流中根本没有被区分,因此输出被称为“扁平化”。
典型的用法是flatmap
的映射器函数,如果它想发送零个值,则返回stream.empty()
;如果它想返回几个值,则返回类似stream.of(a,b,c)
的函数。但当然可以返回任何流。
问题内容: 在Java 8中,和方法之间有什么区别? 问题答案: 双方map并可以应用到他们都回报。不同之处在于,该map运算为每个输入值生成一个输出值,而该运算为每个输入值生成任意数量(零个或多个)的值。 这反映在每个操作的参数中。 该map操作采用一个,对输入流中的每个值调用,并产生一个结果值,该结果值发送到输出流。 该操作采用的功能在概念上要消耗一个值并产生任意数量的值。但是,在Java中,
我对spark(和编程)很陌生,所以如果你能帮助我理解这两个输出之间的区别,那就太好了。
有人能给我解释一下map和flatMap之间的区别,以及什么是各自的好用例吗? “结果扁平化”是什么意思?它有什么好处?
问题内容: 似乎这两个功能非常相似。它们具有相同的签名(接受),并且它们的大理石图看起来完全相同。无法在此处粘贴图片,但这是用于concatMap的图片,这是用于flatMap的图片。在结果的描述中似乎存在一些细微的差异,其中所产生的包含通过合并产生的可观察变量产生的项目,而所产生的包含通过首先合并所产生的可观察变量并发出合并结果而产生的项目。 但是,这种微妙之处对我来说还不清楚。任何人都可以更好
switchmap的rxjava文档定义相当模糊,它链接到与FlatMap相同的页面。这两个操作员有什么不同?
我知道什么是mapPartition转换和map。一些帖子声称mapPartition比map快。在什么情况下,我们使用mapPartition而不是map?mapPartition比map快吗?