【问题标题】:Using map on an Option[Seq[T]]在 Option[Seq[T]] 上使用 map
【发布时间】:2014-03-27 16:01:32
【问题描述】:

我有一个 Option[Seq[T]] 很自然地可能包含一个 Seq[T] 或者实际上可能是 None。

我已被警告不要使用 .get,但如果 Option 为 None,我如何使用 map 返回预期填充的 Seq[T] 或空 List()。

我已经设法使用模式匹配来做到这一点,想知道是否有办法使用 map 来实现相同的目标。谢谢!

val maybeProducts:Option[Seq[Product]] = {....}

val products:Seq[Product] = {
  maybeProducts match {
    case Some(ps) => ps
    case None     => List()
  }
}

【问题讨论】:

    标签: scala


    【解决方案1】:

    你可以使用getOrElse:

    maybeProducts.getOrElse(List())
    

    【讨论】:

    • 谢谢,我假设看到 get 被认为是邪恶和容易出错的,也不应该使用它的兄弟 getOrElse。
    • @user3231690 避免get 的原因是在None 的cae 中可能会有例外,因为没有定义的结果。使用getOrElse,您始终有一个已定义的返回值,不需要异常。
    【解决方案2】:
    val products: Seq[Product] = maybeProducts.getOrElse(List())
    

    【讨论】:

      【解决方案3】:

      记录在案;另一种解决方案是将选项转换为列表,然后将它们展平:

      maybeProducts.toList.flatten
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-16
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 2019-03-03
        相关资源
        最近更新 更多