在斯卡拉我有一個List
與可選Option
。例如,當您在List
上使用for
時,您的收益率將返回Option
。在我的情況下,我正在處理一個JSON對象並在字段列表(List[JField]
)上使用for
理解。打開0或1個選項列表的最佳方式是什麼?
什麼是最好的方式來打開清單和地圖List()
到None
和List(Some(a))
到Some(a)
?
第一種方法是
def headOrNone[A](list:List[Option[A]]) =
list match {
case Nil => None
case a::Nil => a
}
另一種方法
def headOrNone[A](list:List[Option[A]]) = list.headOption.getOrElse(None)
第三種方法(在headOption執行的變化)
def headOrNone[A](list:List[Option[A]]) = if (list.isEmpty) None else list.head
我個人比較喜歡第三種方法。這個函數有沒有比headOrNone
更好的名字,用什麼方法來寫它呢?
第三個選項是headOption實現的變體,因此它看起來效率最高。你爲什麼喜歡第二個? –
@Marius,看我的更新。 – dhg
Nice flatten.headOption,出來,然後回到選項:)我會嘗試重寫代碼。 –