2016-01-08 3 views
3

Мне нужно добавить товар в Seq в зависимости от состояния.Scala: добавить элементы последовательности последовательностей или последовательностей слияния условно

Единственное, что я был в состоянии сделать это:

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

part1 и part2 являются Seq[String]. Это работает, но есть много повторяющегося кода. Любой способ сделать это лучше? Спасибо

ответ

4

В вашем случае третья часть может быть Option аль:

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

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

2

Рассмотрим также 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) 
Смежные вопросы