繁体   English   中英

如何最好地通过Scala中的Map [String,Int]过滤Seq [Object]?

[英]How best to filter a Seq[Object] by a Map[String, Int] in Scala?

我正在尝试通过Map [objectid:String,Int]过滤包含对象的Seq [Object],其中Object.id是Map中的键。

我想返回一个新Map,该Map仅包含其ID在原始地图中的对象及其Int值。 因此,函数应返回Map [Object,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 )在这里确实很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM