如何最好地通过scala中的地图[string,int]过滤seq [对象]



我正在尝试过滤一个包含一个对象的seq [对象]映射[ObjectId:String,int]其中object.id是地图中的键。

我想返回一张新的地图,该映射仅包含具有其int值的原始映射中ID的对象。因此功能应返回地图[对象,int]

这是我到目前为止所拥有的?实现这一目标的最佳方法是什么?

val peopleObjects[Person] = Seq[person1, person2, person3]
val peopleMap[String, Int] = Map[PersonId, Int]
peopleObjects.filter(person[Person] => peopleMap.contains)

您的命名选择有些混乱。我试图使它更清楚,但是如果idString,则不清楚Int代表什么。

class Person(val id: String) {}
val (tom, jan) = (new Person("tom"), new Person("jan"))
val persons = Seq[Person](tom, jan)
val idMap = Map[String, Int]("tom"->4, "jan"->2)
val personMap = persons.filter(p => idMap.contains(p.id))
                       .map(p => p->idMap(p.id))
                       .toMap
personMap(jan)  // res0: Int = 2

我会采用一种略有不同的方法。从@jwvh借来的借款:

case class Person(id: Int, name: String)
val tom = Person(4, "tom")
val jan = Person(2, "jan")
val people: Future[Set[Person]] = Future.successful(Set(tom, jan))
val peopleMap = people.map { set =>
   set.map(p => (p -> p.id))(breakOut)
}

基本上我认为案例类,尤其是breakOut,在这里确实很有用。

最新更新