按属性从Scala Seq(列表)中获取元素

时间:2016-03-26 18:39:01

标签: scala

说我有以下内容:

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

其中Person的定义如下:

case Class Person(
    id: Long
    name: String)

如何通过ID从store检索人物?

2 个答案:

答案 0 :(得分:6)

您可以find使用谓词来比较该人的ID:

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

这将为您提供Option[Person],其中第一个元素与谓词匹配,如果不存在具有此类ID的人,则为无。

答案 1 :(得分:1)

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

考虑对您的商店使用Map[Int, Person],如果商店变大,这将改善Person的查询时间。

e.g:

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)