在为不耐烦的 Scala 解决收集练习问题时:
编写一个接收字符串集合和从字符串到整数的映射的函数。返回一个整数集合,这些整数是映射的值,对应于集合中的一个字符串。例如,给定< Array("Tom", "Fred", "Harry") >
和< Map("Tom" -> 3, "Dick" -> 4, "Harry" -> 5) >
返回< Array(3,5) >
。提示:用于<flatMap>
组合.<Option>
<get>
这是我的解决方案并且工作正常:
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]) => List[Nothing]
flatMap(x => x) 和 flatMap(_) 有什么区别。据我了解,两者都是一样的。
PS这个问题的更简单的解决方案是
list.flatMap(mapper.get)