指定集合的​​默认值

时间:2014-11-27 06:54:52

标签: scala scala-collections

在scala中,是否有一种惯用的方法来指定集合空的默认值?

对于Option,您可以使用.getOrElse。 我在想下面的事情:

Seq().ifEmpty(Seq("aa", "bb")) // Seq("aa", "bb")
Seq("some", "value").ifEmpty(Seq("aa", "bb")) // Seq("some", "value")

3 个答案:

答案 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