在解决Scala for Impatient的集合练习题时:
编写一个函数,接收字符串集合以及从字符串到整数的映射 . 返回一个整数集合,这些整数是与集合中某个字符串对应的映射值 . 例如,给定 < Array("Tom", "Fred", "Harry") >
和 < Map("Tom" -> 3, "Dick" -> 4, "Harry" -> 5) >
返回 < Array(3,5) >
. 提示:使用 <flatMap>
组合 <get>
返回的 <Option>
值 .
这是我的解决方案和工作正常:
def mapValues(list: List[String], mapper: Map[String, Int]) : List[Int] = {
list.map(mapper.get).flatMap(x => x)
}
但是,将代码更改为
list.map(mapper.get).flatMap(_)
我收到返回类型的错误 . 它要求我将返回类型更改为((Option [Int])=> GenTraversableOnce [_B])=>列表[Nothing]
flatMap(x => x)和flatMap(_)之间有什么区别?据我所知,两者都是一样的 .
附:但问题的解决方案更简单
list.flatMap(mapper.get)