gpt4 book ai didi

scala - 在创建 Option[String] 之前过滤字符串

转载 作者:行者123 更新时间:2023-12-01 09:23:45 25 4
gpt4 key购买 nike

我有以下 obj 是 JsObject:

val approx_pieces: Option[String] = (obj \ "approx_pieces").asOpt[String]

如果数据库中的大约件数为“0”,此代码将创建一个 Some("0")

如何更改它以便在字符串为“0”时创建 None

最佳答案

如果您已经有一个 Option,并且您不想在某些情况下使用该值,那么 filter 是您最惯用的选择:

val one = Option("1")
val zero = Option("0")
one.filter(_ != "0") //Some("1")
zero.filter(_ != "0") //None

使用此方法,您的解决方案将是:

(obj \ "approx_pieces").asOpt[String].filter(_ != "0")

或者,您可以使用 match 语句来执行此操作。 Play 中的 JsValue 子类型都有一个 unapply 方法,所以你可以直接匹配它们:

(obj \ "approx_pieces") match {
case JsString(num) if num != "0" => Some(num)
case _ => None
}

您可能还对 collect 方法感兴趣:

(obj \ "approx_pieces").asOpt[String] collect {
case num if num != "0" => num
}

collect 很好,因为它允许您同时过滤和映射。

您也可以同时使用以上两种方法:

Option(obj \ "approx_pieces") collect {
case JsString(num) if num != "0" => num
}

关于scala - 在创建 Option[String] 之前过滤字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29033433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com