Scala 中 List 的 flatMap 函数

use*_*957 0 functional-programming scala list scala-collections flatmap

val l = List(1,2,3)
val f = l flatMap (_ + 1)
Run Code Online (Sandbox Code Playgroud)

我在 Scala 中运行上述代码段,但出现以下错误。

<console>:12: error: type mismatch;
 found   : Int(1)
 required: String
       val f = l flatMap (_ + 1)
Run Code Online (Sandbox Code Playgroud)

是什么flatMap做的是,它进行地图功能,我们提供(在这种情况下- >:_ + 1),然后遍历map函数的结果。如果迭代器在地图输出上不可用,则会引发此错误。

我的理解正确吗?

And*_*cus 5

是的,但是您传递给的函数flatMap应该产生一个List本身。您正在寻找的只是map

val l = List(1,2,3)
val f = l map (_ + 1)
Run Code Online (Sandbox Code Playgroud)

flatMap是(顾名思义)连续的mapflatten。后者在List将嵌套集合转换为平面集合的情况下:

val nestedList: List[List[A]] = ???
val flattenedList: List[A] = nestedList.flatten
Run Code Online (Sandbox Code Playgroud)

如果你通过生产函数的例子会工作ListflatMap,例子:

val res1 = l.flatMap(el => List(el + 1)) // add 1 to every element - same as with map above
val res2 = l.flatMap(el => List(el, 1)) // add 1 after every element
Run Code Online (Sandbox Code Playgroud)