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

按属性从Scala Seq(列表)中获取元素,scala,Scala,假设我有以下几点: lazy val store: Seq[Person] = Seq( Person(1, "Bob"), Person(2, "Jim") ) 其中,人员的定义如下: case Class Person( id: Long name: String) 如何通过id从存储中检索人员?您可以使用查找和比较人员id的谓词: val p = store.find(_.id == someId) 这将为您提供一个选项[Person],第一个元素与谓

假设我有以下几点:

lazy val store: Seq[Person] = Seq(
    Person(1, "Bob"),
    Person(2, "Jim")
)
其中,
人员
的定义如下:

case Class Person(
    id: Long
    name: String)

如何通过id从
存储
中检索人员?

您可以使用
查找
和比较人员id的谓词:

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

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

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

考虑使用
映射[Int,Person]
到您的店铺,这将在店铺变大时缩短
Person
的查找时间

e、 g:


@ AlxiSc已经给了你正确的答案,但是如果你这么做的话,你可能想考虑使用<代码> ID >代码>。谢谢。如果我想从一个方法返回
Person
的内容,我如何从选项中获取该内容?@harryg您可以检查该选项是否为空并使用get(您可以查看文档中的其他方法),或者使用模式匹配,例如:
。。。匹配{case Some(p)=>println(“Person”+p.id+“”+p.name)case None=>println(“None”)}
用于理解(p Heh.Snap!(参见我的评论)@TheArchetypalPaul LOL:)
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)