Scala:将项目添加到序列或有条件地合并序列
Scala: add items to a sequence or merge sequences conditionally
我需要根据条件向 Seq
添加项目。
我唯一能做的是:
if(condition){
part1 ++ part2 ++ Seq(newItem)
}
else {
part1 ++ part2
}
part1
和 part2
是 Seq[String]
。
它有效,但有很多重复的代码。有什么办法可以做得更好吗?
谢谢
在你的情况下,第三部分可以是 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 正在发挥作用。
part1 ++ part2 ++ Some(newItem).filter(_ => condition)
还考虑Seq.empty
if-else 表达式,如下所示,
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)
我需要根据条件向 Seq
添加项目。
我唯一能做的是:
if(condition){
part1 ++ part2 ++ Seq(newItem)
}
else {
part1 ++ part2
}
part1
和 part2
是 Seq[String]
。
它有效,但有很多重复的代码。有什么办法可以做得更好吗?
谢谢
在你的情况下,第三部分可以是 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 正在发挥作用。
part1 ++ part2 ++ Some(newItem).filter(_ => condition)
还考虑Seq.empty
if-else 表达式,如下所示,
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)