2017-02-24 40 views
1

我可以使用if語句來完成此操作,但可能有一種「scala」做這個。如何將scala中的序列轉換/換行爲Option [Seq],以便如果列表爲空,則該選項爲None

def notScalaConv(in: Seq[String]): Option[Seq[String]] = { 
    if (in.isEmpty) 
     None 
    else 
     Option(in) 
    } 
+0

'if'是Scala的表達,這是罕見的在其他語言:使用這種方式看起來「scalaish」我 –

+1

當你寫的,你的'if'是行不通的,因爲一個分支「if」的值總是「Unit」。我通過添加「else」來糾正它。 –

回答

7

您可以解除你的SeqOption,然後過濾。就像這樣:

def notScalaConv(in: Seq[String]): Option[Seq[String]] = { 
    Option(in).filter(_.nonEmpty) 
} 
+0

更好地使用'nonEmpty'比雙重否定。 –

+0

@MichaelZajac所以這就是它的名字。我無法通過我的快速搜索找到它。謝謝 :) – marstran

-1

你爲什麼不能簡單地做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)) 
+0

'Option [Seq [Nothing]]'!='None'。它只給你一個'Seq [Nothing]',因爲你沒有在'Seq()'中指定類型參數。 – marstran

+0

這個答案沒有意義。 – pedrofurla

+0

好吧好吧我是'Option(dumb)':) – prayagupd