是否有Scala API方法來轉換Seq[Option[T]] -> Seq[T]
?斯卡拉是否有一個將Seq [Option [T]]轉換爲Seq [T]的API方法?
您可以通過手動做到這一點:
seq.filter(_.isDefined).map(_.get)
想知道如果有,做上述的一般API中的方法。
是否有Scala API方法來轉換Seq[Option[T]] -> Seq[T]
?斯卡拉是否有一個將Seq [Option [T]]轉換爲Seq [T]的API方法?
您可以通過手動做到這一點:
seq.filter(_.isDefined).map(_.get)
想知道如果有,做上述的一般API中的方法。
絕對,肯定不是。 (不是!)
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)
不是? (15個字符) – 2010-08-26 05:14:55
令人驚訝的是,so1.flapMap(r => r)也適用。這似乎是由於Option可以轉換爲可迭代的事實:隱式def option2Iterable [A](xo:Option [A]):Iterable [A] = xo.toList。當僅調用xo.toList時,Some(X)會生成一個列表值。沒有給出一個List()。其餘的是Flatmap。 – ssanj 2010-08-26 05:25:44
並不奇怪,因爲'flatMap(fun)'=='map(fun).flatten'。 – Debilski 2010-08-26 16:29:13
'filter' +'map'可以簡化爲'collect',以部分函數作爲參數。 – tiran 2013-11-19 08:06:01