![](/img/trans.png)
[英]How to convert Seq[Object] to Map[User, Set[String] in Scala
[英]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)
您的命名选择有些混乱。 我试图使其更加清晰,但是如果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
)在这里确实很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.