Решением может быть использование метода fill
из списка. Решение показано ниже:
scala> val l1 = List((4, 'a'), (1, 'b'), (2,'c'))
l1: List[(Int, Char)] = List((4,a), (1,b), (2,c))
scala> def decode[A](l: List[(Int, A)]): List[A] = {
| l flatMap { e => List.fill(e._1)(e._2)}
| }
decode: [A](l: List[(Int, A)])List[A]
scala> decode[Char](l1)
res60: List[Char] = List(a, a, a, a, b, c, c)
Надеюсь, это поможет !!