首页 文章

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

提问于
浏览
0

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

我想返回一个新的Map,其中只包含id在原始 Map 中的对象及其Int值 . 所以函数应该返回Map [Object,Int]

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

val peopleObjects[Person] = Seq[person1, person2, person3]

val peopleMap[String, Int] = Map[PersonId, Int]

peopleObjects.filter(person[Person] => peopleMap.contains)

2 回答

  • 1

    我会采取略有不同的方法 . 借用@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 ,在这里真的很有用 .

  • 1

    您的命名选择有点令人困惑 . 我试图让它更清晰但如果 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
    

相关问题