Scala中List的flatMap函数

问题描述 投票:0回答:1
val l = List(1,2,3)
val f = l flatMap (_ + 1)

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

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

flatMap的作用是执行我们提供的map函数(在本例中为-> _ +1),然后迭代map函数的结果。如果迭代器在地图输出上不可用,则会引发此错误。

我的理解正确吗?

list scala functional-programming scala-collections flatmap
1个回答
5
投票

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

val l = List(1,2,3)
val f = l map (_ + 1)

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

val nestedList: List[List[A]] = ???
val flattenedList: List[A] = nestedList.flatten

如果您将产生List的函数传递给flatMap,您的示例将起作用,示例:

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
© www.soinside.com 2019 - 2024. All rights reserved.