Sou*_*nta 25 string scala option
我有一个Option[String].
我想检查是否存在字符串,如果存在则不是空白.
def isBlank( input : Option[String]) : Boolean =
{
input.isEmpty ||
input.filter(_.trim.length > 0).isEmpty
}
Run Code Online (Sandbox Code Playgroud)
在Scala中有更好的方法吗?
whe*_*ies 48
你应该做的是检查使用exists.像这样:
myOption.exists(_.trim.nonEmpty)
Run Code Online (Sandbox Code Playgroud)
True当且仅当Option[String]不是None而且不为空时才会返回.
一种基于模式匹配的方法,
def isBlank( input : Option[String]) : Boolean =
input match {
case None => true
case Some(s) => s.trim.isEmpty
}
Run Code Online (Sandbox Code Playgroud)
exists(接受的解决方案)当输入中至少有一个元素时将起作用,但当Some("")它是None.
exists检查是否至少有一个 element( x) 适用于函数。
例如。
scala> List[String]("apple", "").exists(_.isEmpty)
res21: Boolean = true
//if theres no element then obviously returns false
scala> List[String]().exists(_.isEmpty)
res30: Boolean = false
Run Code Online (Sandbox Code Playgroud)
同样的情况也发生在Option.empty,因为其中没有元素,
scala> Option.empty[String].exists(_.isEmpty)
res33: Boolean = false
Run Code Online (Sandbox Code Playgroud)
forall确保函数应用所有元素也是如此。
scala> def isEmpty(sOpt: Option[String]) = sOpt.forall(_.trim.isEmpty)
isEmpty: (sOpt: Option[String])Boolean
scala> isEmpty(Some(""))
res10: Boolean = true
scala> isEmpty(Some("non-empty"))
res11: Boolean = false
scala> isEmpty(Option(null))
res12: Boolean = true
Run Code Online (Sandbox Code Playgroud)
粗略的方法是过滤nonEmpty字符串,然后检查option.isEmpty.
scala> def isEmpty(sOpt: Option[String]) = sOpt.filter(_.trim.nonEmpty).isEmpty
isEmpty: (sOpt: Option[String])Boolean
scala> isEmpty(None)
res20: Boolean = true
scala> isEmpty(Some(""))
res21: Boolean = true
Run Code Online (Sandbox Code Playgroud)