Scala 指定集合的默认值

Scala 指定集合的默认值,scala,scala-collections,Scala,Scala Collections,在scala中,当集合为空时,是否有一种惯用的方法为集合指定默认值 对于选项s,可以使用.getOrElse。 我的想法如下: Seq().ifEmpty(Seq("aa", "bb")) // Seq("aa", "bb") Seq("some", "value").ifEmpty(Seq("aa", "bb")) // Seq("some", "value") 这样行吗 scala> val seq = "ABCDEFG".toIndexedSeq seq: scala.collec

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

对于
选项
s,可以使用
.getOrElse
。 我的想法如下:

Seq().ifEmpty(Seq("aa", "bb")) // Seq("aa", "bb")
Seq("some", "value").ifEmpty(Seq("aa", "bb")) // Seq("some", "value")
这样行吗

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


您可以尝试scalaz的
toNel
(到Non-emptylist)-它将为非空集合提供
部分(集合)
,为空集合提供
None
,因此您可以执行
list.toNel.getOrElse(list(1))

nil[Int]
在这里表示
List[Int]()


Src:

scala(没有scalaz)最干净的方式似乎是:

Option(list).filter(_.nonEmpty).getOrElse(List(1,2,3))

Option
是否提供此行为?
Option
是否提供此行为,我正在为集合寻找类似的内容。IMHO
Option
是为整个对象提供默认值的更好方法
Option(Seq(“some”,“value”)).filter(u.nonEmpty).getOrElse(Seq(“aa”,“bb”))
@Yeonho不,没有这样的事情,至少对于Seq(Map能够为key/value设置默认值)来说,更好的方法是使用一种确保集合不为空的类型,例如
List(1).orElse(List(1,2,3))(2)
将为您提供
3
而不是
IndexOutOfBound
,因此它就像集合元素的默认值,而不是集合本身
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
Option(list).filter(_.nonEmpty).getOrElse(List(1,2,3))