Scala 指定集合的默认值
在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
选项
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
是否提供此行为,我正在为集合寻找类似的内容。IMHOOption
是为整个对象提供默认值的更好方法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))