我可以使用if語句來完成此操作,但可能有一種「scala」做這個。如何將scala中的序列轉換/換行爲Option [Seq],以便如果列表爲空,則該選項爲None
def notScalaConv(in: Seq[String]): Option[Seq[String]] = {
if (in.isEmpty)
None
else
Option(in)
}
我可以使用if語句來完成此操作,但可能有一種「scala」做這個。如何將scala中的序列轉換/換行爲Option [Seq],以便如果列表爲空,則該選項爲None
def notScalaConv(in: Seq[String]): Option[Seq[String]] = {
if (in.isEmpty)
None
else
Option(in)
}
您可以解除你的Seq
到Option
,然後過濾。就像這樣:
def notScalaConv(in: Seq[String]): Option[Seq[String]] = {
Option(in).filter(_.nonEmpty)
}
更好地使用'nonEmpty'比雙重否定。 –
@MichaelZajac所以這就是它的名字。我無法通過我的快速搜索找到它。謝謝 :) – marstran
你爲什麼不能簡單地做val seqOpt = Option(yourSeq)
,它會給你Option(Seq[String])
。
val nonEmpty = Seq("somevalue")
val empty = Seq()
val seqOpt = List(Option(empty), Option(nonEmpty)) map {
case seq if seq.get.isEmpty => None
case x => x
}
assert(seqOpt.head == None)
assert(seqOpt(1) == Option(nonEmpty))
'Option [Seq [Nothing]]'!='None'。它只給你一個'Seq [Nothing]',因爲你沒有在'Seq()'中指定類型參數。 – marstran
這個答案沒有意義。 – pedrofurla
好吧好吧我是'Option(dumb)':) – prayagupd
'if'是Scala的表達,這是罕見的在其他語言:使用這種方式看起來「scalaish」我 –
當你寫的,你的'if'是行不通的,因爲一個分支「if」的值總是「Unit」。我通過添加「else」來糾正它。 –