Scala:向序列添加项目或有条件地合并序列

时间:2016-01-08 19:33:25

标签: scala scala-collections seq

我需要根据条件向Seq添加项目。

我唯一能做的就是:

if(condition){
    part1 ++ part2 ++ Seq(newItem)
}
else {
  part1 ++ part2
}

part1part2Seq[String]。 它有效,但有很多重复的代码。有什么方法可以做得更好吗? 谢谢

3 个答案:

答案 0 :(得分:6)

在你的情况下,第三部分可以是Option al:

val part3 = if (condition) Some(newItem) else None
part1 ++ part2 ++ part3

示例:

scala> Seq(1,2,3) ++ Seq(4,5) ++ Option(6)
res0: Seq[Int] = List(1, 2, 3, 4, 5, 6)

这里隐式转换Option.option2Iterable正在诀窍。

答案 1 :(得分:2)

在if-else表达式上也考虑Seq.empty,如下所示,

part1 ++ part2 ++ (if (condition) Seq(newItem) else Seq.empty)

例如

Seq("a") ++ Seq("b") ++ (if (true) Seq("c") else Seq.empty)
List(a, b, c)

Seq("a") ++ Seq("b") ++ (if (false) Seq("c") else Seq.empty)
List(a, b)

答案 2 :(得分:1)

part1 ++ part2 ++ Some(newItem).filter(_ => condition)