gpt4 book ai didi

Scala 替代附加到列表的一系列 if 语句?

转载 作者:行者123 更新时间:2023-12-02 17:15:02 26 4
gpt4 key购买 nike

我在 Scala 中有一个 Seq[String],如果 Seq 包含某些 String,我将相关消息附加到另一个列表。

是否有更“scalaesque”的方式来做到这一点,而不是像我下面的那样将一系列 if 语句附加到列表?

val result = new ListBuffer[Err]()

val malformedParamNames = // A Seq[String]

if (malformedParamNames.contains("$top")) result += IntegerMustBePositive("$top")
if (malformedParamNames.contains("$skip")) result += IntegerMustBePositive("$skip")
if (malformedParamNames.contains("modifiedDate")) result += FormatInvalid("modifiedDate", "yyyy-MM-dd")
...

result.toList

最佳答案

如果你想使用一些 scala 可迭代糖,我会使用

sealed trait Err
case class IntegerMustBePositive(msg: String) extends Err
case class FormatInvalid(msg: String, format: String) extends Err

val malformedParamNames = Seq[String]("$top", "aa", "$skip", "ccc", "ddd", "modifiedDate")

val result = malformedParamNames.map { v =>
v match {
case "$top" => Some(IntegerMustBePositive("$top"))
case "$skip" => Some(IntegerMustBePositive("$skip"))
case "modifiedDate" => Some(FormatInvalid("modifiedDate", "yyyy-MM-dd"))
case _ => None
}
}.flatten


result.toList

如果您要求以 scala 风格的方式做事,请注意,有很多可能性。

结合flatten的map函数可以使用flatmap来简化

sealed trait Err
case class IntegerMustBePositive(msg: String) extends Err
case class FormatInvalid(msg: String, format: String) extends Err

val malformedParamNames = Seq[String]("$top", "aa", "$skip", "ccc", "ddd", "modifiedDate")

val result = malformedParamNames.flatMap {
case "$top" => Some(IntegerMustBePositive("$top"))
case "$skip" => Some(IntegerMustBePositive("$skip"))
case "modifiedDate" => Some(FormatInvalid("modifiedDate", "yyyy-MM-dd"))
case _ => None
}


result

关于Scala 替代附加到列表的一系列 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46845207/

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