一些scala代码:
val list = List(Some("aaa"), Some("bbb"), None, ...)
list.filter(_!=None).map {
case Some(x) => x + "!!!"
// I don't want to handle `None` case since they are not possible
// case None
}
当我运行它时,编译器会抱怨:
<console>:9: warning: match may not be exhaustive.
It would fail on the following input: None
list.filter(_!=None).map {
^
res0: List[String] = List(aaa!!!, bbb!!!)
如何在不提供case None
行的情况下修复该警告?
答案 0 :(得分:11)
如果您在map
之后使用filter
,则可以使用collect
。
list collect { case Some(x) => x + "!!!" }
答案 1 :(得分:3)
您可以使用flatten
scala> val list = List(Some("aaa"), Some("bbb"), None).flatten
list: List[String] = List(aaa, bbb)
scala> list.map {
| x => x + "!!!"
| }
res1: List[String] = List(aaa!!!, bbb!!!)
答案 2 :(得分:1)
您可以使用@unchecked
注释,但这需要一些额外的代码:
list.filter(_!=None).map { x => ( x : @unchecked) match {
case Some(x) => x + "!!!"
}
}
答案 3 :(得分:0)
您可以使用get
方法代替模式匹配
以下是示例代码:
scala> val list = List(Some("aaa"), Some("bbb"), None)
list: List[Option[String]] = List(Some(aaa), Some(bbb), None)
scala> list.filter(_ != None).map(_.get + "!!!")
res0: List[String] = List(aaa!!!, bbb!!!)
答案 4 :(得分:0)
解决此问题的其他方法,没有filter
和pattern matching
scala> list.flatten map (_ + "!!!")
或
scala> list.flatMap (_ map (_ + "!!!"))