Scala高效的方式来添加规则,为2个字段创建案例类

kokeuurv  于 3个月前  发布在  Scala
关注(0)|答案(2)|浏览(75)
val metaData = MetaData(
      id = metadata.id,
      amount = if (relevant && metadata.amount.isDefined) metadata.amount else image.amount orElse metadata.amount,
      currency = if (relevant && metadata.currency.isDefined) metadata.currency else image.currency orElse metadata.currency
  )

字符串
因此,有2个字段,我想为我的元数据案例类设置,但我有条件,你可以看到,如果相关的是真正的元数据。量定义我将从元数据量从图像。量,如果这是没有定义(意味着图像量没有定义,所以元数据。量是回退)
同样的货币,但现在我想要别的东西:
如果我从元数据中获取金额,我将从元数据中获取货币,所以它们必须放在一起,同样,如果我从元数据中获取货币,我将从元数据中获取金额。
你觉得这样做的代码应该是什么样的

yftpprvb

yftpprvb1#

case class MetaData(
    id: Int,
    amount: Option[Int],
    currency: Option[Int]
)

object Main {
  def main(args: Array[String]): Unit = {
    val relevant = false
    val metadata = MetaData(1, Some(2), Some(3))
    val image = MetaData(4, Some(5), Some(6))

    val sourceMetaData: Boolean =
      metadata.amount.isDefined && metadata.currency.isDefined
    val sourceImage: Boolean =
      image.amount.isDefined && image.currency.isDefined

    val localAmount =
      if ((relevant && sourceMetaData) || !sourceImage) metadata.amount
      else image.amount

    val localCurrency =
      if ((relevant && sourceMetaData) || !sourceImage) metadata.currency
      else image.currency

    val metaData = MetaData(
      id = metadata.id,
      amount = localAmount,
      currency = localCurrency
    )

    print(metaData)
  }
}

字符串
这是以可读格式编写此复杂场景的最佳可能方式。
如果有帮助的话,请接受。谢谢

mf98qq94

mf98qq942#

听起来你需要稍微改变一下你的模型是如何建模的,这样金额和货币要么总是同时存在,要么两者都不存在。
类似于:

case class Amount(amount: Long, currency: String)

case class Metadata(id: Long, amount: Option[Amount])

字符串

相关问题