在解决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)