2010-08-26 26 views

Antwort

41

Absolut, positiv nicht. (Nicht!)

scala> val so1 = List(Some(1), None, Some(2), None, Some(3)) 
so1: List[Option[Int]] = List(Some(1), None, Some(2), None, Some(3)) 

scala> so1.flatten 
res0: List[Int] = List(1, 2, 3) 
+0

nicht? (15 Zeichen) –

+2

Überraschenderweise funktioniert auch so1.flapMap (r => r). Dies scheint auf die Tatsache zurückzuführen zu sein, dass Option in ein iterbares umgewandelt werden kann: implizit def option2Iterable [A] (xo: Option [A]): ​​Iterable [A] = xo.toList. Wenn xo.toList nur aufgerufen wird, erzeugt Some (X) einen Listenwert. Keiner gibt eine Liste(). Flatmap erledigt den Rest. – ssanj

+9

Nicht so überraschend, weil 'flatMap (fun)' == 'map (fun) .flatten'. – Debilski