【问题标题】:Scala Check optional string is null or emptyScala 检查可选字符串是否为空或为空
【发布时间】:2017-01-10 04:37:24
【问题描述】:

我是 Scala 的新手,我想了解如何在 optional 字符串上添加 null 和空检查?

val myString : Option[String]

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

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

谢谢

【问题讨论】:

  • 你确定Option可以为空吗?
  • 一般来说,当使用Option[T] 时,您不应该进行空检查。 Option[T] 的确切目的是处理一个可能有值也可能没有值的框。

标签: java scala nullpointerexception functional-programming isnull


【解决方案1】:

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

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

【讨论】:

  • 您也可以在字符串上使用“s.nonEmpty”,而不是“!s.isEmpty”。
【解决方案2】:

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
 }

【讨论】:

    【解决方案3】:

    我猜惯用的方式是这样的:

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

    【讨论】:

      【解决方案4】:

      使用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)
      

      【讨论】:

        猜你喜欢
        • 2020-05-29
        • 2015-06-05
        • 2017-08-19
        • 1970-01-01
        • 2015-06-12
        • 2010-10-23
        • 1970-01-01
        • 2014-07-27
        相关资源
        最近更新 更多