Как преобразовать/обернуть последовательность в scala в Option[Seq], чтобы, если список пуст, Option был None

Я мог бы сделать это с помощью оператора if, но, вероятно, для этого есть способ «Scala».

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

person marathon    schedule 24.02.2017    source источник
comment
if — это выражение в Scala, которое редко встречается в других языках: использование его таким образом выглядит для меня нечетким   -  person Bruno Grieder    schedule 24.02.2017
comment
Как вы написали, ваш if не будет работать, потому что значение if с одной ветвью всегда равно Unit. Я исправил это, добавив else.   -  person Seth Tisue    schedule 24.02.2017


Ответы (2)


Вы можете поднять свой Seq до Option, а затем отфильтровать его. Так:

 def notScalaConv(in: Seq[String]): Option[Seq[String]] = {
     Option(in).filter(_.nonEmpty)
 }
person marstran    schedule 24.02.2017
comment
Лучше использовать nonEmpty, чем двойное отрицание. - person Michael Zajac; 24.02.2017
comment
@MichaelZajac Так вот как это называется. Я не мог найти его с моим быстрым поиском. Спасибо :) - person marstran; 24.02.2017

Почему бы вам просто не сделать 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))
person prayagupd    schedule 24.02.2017
comment
Option[Seq[Nothing]] != None. Это дает вам только Seq[Nothing], потому что вы не указали параметр типа в Seq(). - person marstran; 24.02.2017
comment
Этот ответ не имеет смысла. - person pedrofurla; 24.02.2017