scala - 如何将Some ("")转换为单行的None?

标签 scala

我想定义一个函数:

def convert(x: Option[String]): Option[String] = ...

xSome(str)并且修剪后str为空时,它将被转换为None,否则,它将是带有修剪后的字符串的Some

因此,测试用例将是:
convert(Some("")) == None
convert(Some("  ")) == None
convert(None) == None
convert(Some(" abc ")) == Some("abc")

我可以这样写:
def convert(x: Option[String]): Option[String] = x match {
  case Some(str) if str.trim()!="" => Some(str.trim())
  case _ => None
}

但是我希望找到一个更简单的实现(单行)。

最佳答案

那这个呢:

def convert(x: Option[String]) = 
    x.map(_.trim()).filterNot(_.isEmpty())

更新:@JamesMoore和@PeterSchmitz建议的替代语法:
x map {_.trim} filterNot {_.isEmpty}
x map (_.trim) filterNot (_.isEmpty)

关于scala - 如何将Some ("")转换为单行的None?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9569076/

相关文章:

ScalaTest Matchers 与 MustMatchers 的区别

java - JVM控制台应用程序中如何处理^C?

database - Scalatra/Slick 并插入 IF NOT EXISTS

scala - Spark : How to efficiently have intersections preserving duplicates (in Scala)?

sql - 使用Scala从Spark hadoop中的字符串中提取单词

scala - 为什么在 RDD 中,map 会给出 NotSerializedException,而 foreach 不会?

syntax - 为什么这些语句之一可以在 Scala 中编译,而另一个则不能?

arrays - 使用元组进行 Scala 数组切片

scala - Play 框架 2.1 的 javac 错误

scala - 从 Scala 中经过类型检查的具体化 `Tree` 中提取类型