我正在创建一种方法,通过ID从数据库中检索用户列表。
我试图决定将ids
参数声明为Option[Seq[String]]
vs Seq[Option[String]]
的优缺点?
在什么情况下,我应该支持哪一个?
答案 0 :(得分:3)
既未表示为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]
代表什么
答案 1 :(得分:1)
与往常一样,这在很大程度上取决于用例。
如果序列的大小相关,则Seq[Option[String]]
将很有用(例如,因为你想用另一个序列压缩它)。
如果不是这种情况,我会选择展平序列,以便只有Seq[String]
。这可能是比Option[Seq[String]]
更好的选择,因为序列也可以是零长度。
实际上,Option
通常可以被视为一个数组可以长度为零或一个的数组。因此,将Iterable
包裹在Option
中通常只会增加不必要的复杂性。