使用值在可变映射中查找键
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]]()
如果我们有 Item
的 id
,我们如何在 '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
我们有案例class个Item和一个categoryMap如下所示:
case class Item(id: Int, name: String)
val categoryMap = scala.collection.mutable.Map[CategoryId: Int, List[Item]]()
如果我们有 Item
的 id
,我们如何在 '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