我想定义一个函数:
def convert(x: Option[String]): Option[String] = ...
Run Code Online (Sandbox Code Playgroud)
当x
是Some(str)
和str
修剪后为空时,它将被转换为无,否则,它将是一个Some
修剪过的字符串.
因此,测试用例将是:
convert(Some("")) == None
convert(Some(" ")) == None
convert(None) == None
convert(Some(" abc ")) == Some("abc")
Run Code Online (Sandbox Code Playgroud)
我可以写成:
def convert(x: Option[String]): Option[String] = x match {
case Some(str) if str.trim()!="" => Some(str.trim())
case _ => None
}
Run Code Online (Sandbox Code Playgroud)
但我希望找到一个更简单的实现(单行).
Tom*_*icz 16
那这个呢:
def convert(x: Option[String]) =
x.map(_.trim()).filterNot(_.isEmpty())
Run Code Online (Sandbox Code Playgroud)
更新:@JamesMoore和@PeterSchmitz建议的替代语法:
x map {_.trim} filterNot {_.isEmpty}
x map (_.trim) filterNot (_.isEmpty)
Run Code Online (Sandbox Code Playgroud)