Scala 在选项上使用映射[Seq[T]]
我有一个选项[Seq[T]],很自然地,它可能包含一个Seq[T],或者实际上可能没有 有人警告我不要使用.get,但是如果选项为None,我如何使用map返回预期填充的Seq[T]或空列表() 我已经设法使用模式匹配来实现它,我想知道是否有一种方法可以使用map来实现相同的目标。谢谢Scala 在选项上使用映射[Seq[T]],scala,Scala,我有一个选项[Seq[T]],很自然地,它可能包含一个Seq[T],或者实际上可能没有 有人警告我不要使用.get,但是如果选项为None,我如何使用map返回预期填充的Seq[T]或空列表() 我已经设法使用模式匹配来实现它,我想知道是否有一种方法可以使用map来实现相同的目标。谢谢 val maybeProducts:Option[Seq[Product]] = {....} val products:Seq[Product] = { maybeProducts match {
val maybeProducts:Option[Seq[Product]] = {....}
val products:Seq[Product] = {
maybeProducts match {
case Some(ps) => ps
case None => List()
}
}
您可以使用
getOrElse
:
maybeProducts.getOrElse(List())
备案;另一种解决方案是将选项转换为列表,然后将其展平:
maybeProducts.toList.flatten
谢谢,我认为既然get被认为是邪恶且容易出错的,那么我们也不应该使用它的兄弟getOrElse。@user3231690避免使用
get
的原因是在None
的cae中可能会有异常,因为没有定义的结果。使用getOrElse
时,您始终有一个已定义的返回值,不需要任何异常。
maybeProducts.toList.flatten