我正在尝试过滤一个包含一个对象的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)
您的命名选择有些混乱。我试图使它更清楚,但是如果id
是String
,则不清楚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
,在这里确实很有用。