Вы можете использовать flatMap
(полная сигнатура метода в 2.7 - def flatMap[B](f : (A) => Iterable[B]) : List[B]
). Он объявляется как Iterable
, так и Iterator
(с немного отличающимися подписями):
scala> val l = List("1", "Hello", "2")
l: List[java.lang.String] = List(1, Hello, 2)
scala> val ints = l.flatMap { s => try { Some(s.toInt) } catch { case _ => None } }
ints: List[Int] = List(1, 2)
В приведенном выше примере я использую явное преобразование option2iterable
в Predef
. Это объявлено в 2.8 TraversableLike
:
def flatMap[B, That](f: A => Traversable[B])(implicit bf: CanBuildFrom[Repr, B, That]): That