Scala Check可选字符串为null或空

时间:2016-09-02 06:50:51

标签: java scala nullpointerexception functional-programming isnull

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

val myString : Option[String]

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

上面的代码有效,但我想学习一些优雅的方法来编写相同的检查。任何帮助都非常感谢,

感谢

4 个答案:

答案 0 :(得分:5)

使用Option构造函数有一种非常方便的方法。

scala> Option("Hello Worlds !")
res: Option[String] = Some(Hello Worlds !)


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

因此,如果您有可能为空值的字符串列表,则可以使用Optionflatten的组合:

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

我认为惯用法看起来像这样:

val myString : Option[String] = ...
myString
  .filterNot(StringUtils.isEmpty)
  .foreach(builder.queryParam("localStr", _))

答案 3 :(得分:1)

选项[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
 }