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的可变对象,并且我不知道这里是否合适。
声明元组列表,条件在左侧,枚举在右侧:
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)