代码之家  ›  专栏  ›  技术社区  ›  jbrown

Scala:Option[Seq[String]]vs Seq[Option[String]]?

  •  2
  • jbrown  · 技术社区  · 11 年前

    我正在创建一个方法,通过ID从数据库中检索用户列表。

    我正试图决定宣布 ids 参数为 Option[Seq[String]] Seq[Option[String]] ?

    在什么情况下,我应该偏爱一个而不是另一个?

    2 回复  |  直到 11 年前
        1
  •  3
  •   Martijn    11 年前

    中的用户列表,两者都没有很好地表示为 Option[Seq[String]] 也不作为 Seq[Option[String]] 。我希望有类似 List[User] 作为用户列表。或者可能是 Vector Seq

    如果您的字符串表示您的用户,而None情况不起作用,那么您可以考虑将其过滤掉。你可以用

    val dbresult: Seq[Option[String]] = ???
    val strings = dbresult collect { case Some(str) => str }
    

    val strings = dbresult.flatten
    

    但如果不知道 Option[String] Option[Seq] 代表

        2
  •  2
  •   Philosophus42    11 年前

    通常,这很大程度上取决于用例。

    A. Seq[Option[String]] 如果序列的大小是相关的(例如,因为你想用另一个序列压缩它),这将非常有用。

    如果不是这样的话,我会选择将序列展平,以便 Seq[String] 。这可能是一个比 Option[Seq[String]] ,因为序列也可以是零长度。

    事实上 Option 通常可以将其视为长度为零或一的数组。因此,包装 Iterable 选项 通常只会增加不必要的复杂性。

    推荐文章