Scala检查可选字符串是否为空或null

4

我是一个Scala的新手,想学习如何在可选字符串上添加null和空检查?

val myString : Option[String]

if (null != myString) {
  myString
    .filter(localStr=> StringUtils.isEmpty(localStr))
    .foreach(localStr=> builder.queryParam("localStr", localStr))
}

上面的代码可以工作,但我想学习一些更优雅的编写相同检查的方法。非常感谢任何帮助。谢谢。

你确定 Option 可以为空吗? - Sergii Lagutin
通常情况下,当使用Option[T]时,不应该进行空值检查。 Option[T] 的确切目的是在可能具有或可能没有值的盒子上工作。 - Yuval Itzchakov
4个回答

5
有一种非常方便的方法,可以使用 Option 构造函数。
scala> Option("Hello Worlds !")
res: Option[String] = Some(Hello Worlds !)


scala> Option(null)
res: Option[Null] = None

如果你有一组可能包含null值的字符串列表,你可以使用 Optionflatten 来进行组合:

scala> List("Speak", "friend", null, "and", null ,"enter").map(s => Option(s)) .flatten
res: List[String] = List(Speak, friend, and, enter)

4

模式匹配将有助于简化你的代码:

myString match {
case Some(s) if(!s.isEmpty) => s.foreach(localStr=> builder.queryParam("localStr", localStr))
case _ => "No String"
} 

你也可以在字符串上使用"s.nonEmpty",而不是"!s.isEmpty"。 - Matt

2
我猜想惯用的方式应该是这样的:
val myString : Option[String] = ...
myString
  .filterNot(StringUtils.isEmpty)
  .foreach(builder.queryParam("localStr", _))

1

Option[String]可以存储两种类型的值,即Some(String)或None,因此当您不需要检查null时,只需使用scala match case检查None,如下所示:

val myString : Option[String] = Some("ss")

 myString match {
   case Some(str)=>str.filter(localStr=> StringUtils.isEmpty(localStr))
    .foreach(localStr=> builder.queryParam("localStr", localStr))
   case None => //do whatever you want while condition failure
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接