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

时间:2015-09-03 09:06:14

标签: scala

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

我试图决定将ids参数声明为Option[Seq[String]] vs Seq[Option[String]]的优缺点?

在什么情况下,我应该支持哪一个?

2 个答案:

答案 0 :(得分:3)

既未表示为Option[Seq[String]]也未表示为Seq[Option[String]]的用户列表。我希望像List[User]这样的用户列表。或者是VectorSeq

如果您的字符串代表您的用户,并且None情况不起作用,您可以考虑将其过滤掉。您可以使用

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

val strings = dbresult.flatten

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

,很难提出好的建议

答案 1 :(得分:1)

与往常一样,这在很大程度上取决于用例。

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

如果不是这种情况,我会选择展平序列,以便只有Seq[String]。这可能是比Option[Seq[String]]更好的选择,因为序列也可以是零长度。

实际上,Option通常可以被视为一个数组可以长度为零或一个的数组。因此,将Iterable包裹在Option中通常只会增加不必要的复杂性。