2017-02-24 15 views
1

私はif文でこれを行うことができますが、おそらく "scala"これを行う。スカラのシーケンスをOption [Seq]に変換してラップする方法です。リストが空の場合、OptionはNoneです。

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

'if'が、他の言語でも珍しくありスカラでの発現である:それを使用して、この方法は、あなたがそれを書いたように、あなたの' if'が動作しない私に「scalaishを」 –

+1

に見える、このような1つの分岐ifの値は常に「Unit」であるからです。私は 'else'を追加して修正しました。 –

答えて

7

あなたのSeqOptionに持ち上げ、それをフィルタリングすることができます。

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

'nonEmpty'をダブルネガティブよりも使う方が良いです。 –

+0

@MichaelZajacそれはそれが呼ばれているものです。私はクイック検索でそれを見つけることができませんでした。ありがとう:) – marstran

-1

は、なぜあなたは単にあなたOption(Seq[String])を与えるだろうval seqOpt = Option(yourSeq)を行うことはありません。

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

'オプション[Seq [Nothing]]'!= 'None'。 'Seq()'に型パラメータを指定しなかったので、 'Seq [Nothing]'のみを返します。 – marstran

+0

この回答は理にかなっていません。 – pedrofurla

+0

大丈夫です。私は 'option(dumb)'でした。:) – prayagupd

関連する問題