map
和flatMap
都是用于处理集合(如列表、数组等)中的元素的方法,它们的主要区别在于处理结果的方式。
-
map
:它会对集合中的每个元素应用一个函数,并将结果收集到一个新的集合中。这意味着map
操作不会改变原始集合的结构,而是创建一个新的集合来存储转换后的元素。 -
flatMap
:它同样会对集合中的每个元素应用一个函数,但与map
不同的是,它会将函数的返回值扁平化(flatten),即将嵌套的集合或数组展开成一个单一的集合。这意味着flatMap
可能会改变原始集合的结构,因为它会将所有嵌套的元素提取出来并放入一个新的集合中。
举个例子,假设我们有一个整数列表List(1, 2, 3)
,我们想要将每个元素乘以2,然后收集结果。使用map
操作,我们将得到一个新的列表List(2, 4, 6)
;而使用flatMap
操作,由于我们没有嵌套结构,所以结果仍然是List(2, 4, 6)
。但是,如果我们有一个包含嵌套列表的列表,例如List(List(1, 2), List(3, 4))
,那么使用flatMap
操作将会得到一个扁平化的列表List(1, 2, 3, 4)
。