如何根据彼此遵循的不同条件构造Seq

Rob*_*lds 5 functional-programming scala

我想根据不同条件的结果添加一个元素。现在,我是这样做的:

val add1 = if(condition1) Seq(ENUM_ELEMENT_1) else Seq()
val add2 = if(condition2) Seq(ENUM_ELEMENT_2) else Seq()

return Seq(add1, add2).flatten
Run Code Online (Sandbox Code Playgroud)

如果我使用Java,则只需在开头创建一个空的ArrayList(),然后在代码遇到ifs时将其添加到此列表中。但是在Scala中,我将不得不使用Seq的可变对象,并且我不知道这里是否合适。

Krz*_*sik 7

声明元组列表,条件在左侧,枚举在右侧:

val conditions: Seq[(Boolean, Enum)] = List(
   condition1 -> ENUM_ELEMENT1,
   condition2 -> ENUM_ELEMENT2
)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用collect以下方法减少它:

val result: Seq[String] =  conditions.collect{
    case (true, v) => v
}
Run Code Online (Sandbox Code Playgroud)

flatMap

val result: Seq[Enum] = conditions.flatMap{
   case (true, v) => Some(v)
   case _ => None
}
Run Code Online (Sandbox Code Playgroud)