Я мог бы сделать это с помощью оператора if, но, вероятно, для этого есть способ «Scala».
def notScalaConv(in: Seq[String]): Option[Seq[String]] = {
if (in.isEmpty)
None
else
Option(in)
}
Я мог бы сделать это с помощью оператора if, но, вероятно, для этого есть способ «Scala».
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
, чем двойное отрицание.
- person Michael Zajac; 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))
Option[Seq[Nothing]]
!= None
. Это дает вам только Seq[Nothing]
, потому что вы не указали параметр типа в Seq()
.
- person marstran; 24.02.2017
if
— это выражение в Scala, которое редко встречается в других языках: использование его таким образом выглядит для меня нечетким - person Bruno Grieder   schedule 24.02.2017if
не будет работать, потому что значениеif
с одной ветвью всегда равноUnit
. Я исправил это, добавивelse
. - person Seth Tisue   schedule 24.02.2017