在scala中,是否有一种惯用的方法来指定集合空的默认值?
对于Option
,您可以使用.getOrElse
。
我在想下面的事情:
Seq().ifEmpty(Seq("aa", "bb")) // Seq("aa", "bb")
Seq("some", "value").ifEmpty(Seq("aa", "bb")) // Seq("some", "value")
答案 0 :(得分:4)
斯卡拉(没有scalaz)最干净的方式似乎是:
Option(list).filter(_.nonEmpty).getOrElse(List(1,2,3))
答案 1 :(得分:1)
这样可以吗?
scala> val seq = "ABCDEFG".toIndexedSeq
seq: scala.collection.immutable.IndexedSeq[Char] = Vector(A, B, C, D, E, F, G)
scala> seq(3)
res0: Char = D
scala> val ept = Seq.empty[Char]
ept: Seq[Char] = List()
scala> ept(3)
java.lang.IndexOutOfBoundsException: 3
at scala.collection.LinearSeqOptimized$class.apply(LinearSeqOptimized.scala:51)
at scala.collection.immutable.List.apply(List.scala:83)
... 32 elided
scala> ept.orElse(seq)(3)
res3: Char = D
OR
scala> ept.applyOrElse(3, "abcdef")
res4: Char = d
答案 2 :(得分:0)
你可以试试scalaz的toNel
( N on - e mpty l ist) - 它会给你{{ 1}}用于非空集合,Some(collection)
用于空集合,因此您可以执行None
:
list.toNel.getOrElse(List(1))
scala> import scalaz._; import Scalaz._
import scalaz._
import Scalaz._
scala> List(1, 2, 3).toNel
res8: Option[scalaz.NonEmptyList[Int]] = Some(NonEmptyList(1, 2, 3))
scala> nil[Int].toNel
res9: Option[scalaz.NonEmptyList[Int]] = None
在这里表示nil[Int]
。
Src:http://docs.typelevel.org/api/scalaz/stable/6.0/doc.sxr/scalaz/ListW.scala.html