Вы можете создать функцию, которая будет go через оба списка брать заголовки обоих списков и сравнивать их, а затем добавлять соответствующий заголовок в список результатов. Затем нужно взять следующие две головы и повторять, пока не закончится один список.
Вот пример хвостовой рекурсии:
import scala.annotation.tailrec
def merge[A](a: List[A], b: List[A])(implicit ordering: Ordering[A]): List[A] = {
@tailrec
def go(a: List[A], b: List[A], acc: List[A] = Nil): List[A] = {
(a, b) match {
case (ax :: as, bx :: bs) => if(ordering.compare(ax, bx) < 0) go(as, bx :: bs, ax :: acc) else go(ax :: as, bs, bx :: acc)
case (Nil, bs) => acc.reverse ++ bs
case (as, Nil) => acc.reverse ++ as
case _ => acc.reverse
}
}
go(a, b)
}
val strings = List("a", "d", "f")
val strings2 = List("b", "c")
merge(strings, strings2) // List(a,b,c,d,e)
Я использовал List вместо Seq. Лучше не использовать Seq, который является очень общим типом, а использовать более конкретные типы коллекций c, которые лучше всего подходят для вашей задачи, например Vector, List, ArraySeq et c.