通过属性从Scala Seq(list)中获取元素



假设我有以下内容:

lazy val store: Seq[Person] = Seq(
    Person(1, "Bob"),
    Person(2, "Jim")
)

其中Person定义如下:

case Class Person(
    id: Long
    name: String)

如何通过id从store检索人员?

您可以将find与比较人员id的谓词一起使用:

val p = store.find(_.id == someId)

这将为您提供一个Option[Person],其中第一个元素与谓词匹配,或者如果不存在具有该id的人,则为none。

这不是一个直接的答案,而是一个补充@Alexis答案的建议。

考虑在您的商店中使用Map[Int, Person],这将在商店变大的情况下改善Person的查找时间。

例如:

def main(args: Array[String]) = {
  lazy val store: Map[Int, Person] = Map(
    1 -> Person(1, "Bob"),
    2 -> Person(2, "Jim")
  )
val someId = 1
val result: Option[Person] = store.get(someId)

最新更新