使用值在可变映射中查找键

Using value to find key in mutable map

我们有案例class个Item和一个categoryMap如下所示:

case class Item(id: Int, name: String)

val categoryMap = scala.collection.mutable.Map[CategoryId: Int, List[Item]]()

如果我们有 Itemid,我们如何在 'categoryMap' 中找到 CategoryId-key?

再构建一个从id到类别的映射(省略了Item的一些不相关字段):

case class Item(id: Int, name: String)

val categoryMap = scala.collection.mutable.Map[Int,List[Item]](
  2 -> List(Item(42, "foo"), Item(34, "bar")),
  3 -> List(Item(9824, "baz"), Item(9836, "oofzab"))
)

val itemIdToCategory = (for {
  (k, v) <- categoryMap.toList
  id <- v.map(_.id)
} yield (id, k)).toMap

println(itemIdToCategory(42))
println(itemIdToCategory(34))
println(itemIdToCategory(9824))
println(itemIdToCategory(9836))

打印:2 2 3 3

试试下面的代码:

case class Item(id: Int, name: String)
val item1 = List(Item(1001, "HP"), Item(1002, "Dell"))
val item2 = List(Item(1003, "Fish1"), Item(1004, "Fish2"))
val categoryMap = scala.collection.mutable.Map[Int, List[Item]](100 -> item1,101 -> item2)
val catmap = categoryMap.flatMap { case (key, value) => value.map(_.id -> key) }
println(catmap.getOrElse(1001, null))

Output : 100