Aditya Chopra
Aditya Chopra

Reputation: 80

Using value to find key in mutable map

We have the case class Item and a categoryMap shown as follows:

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

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

How can we find the CategoryId-key in 'categoryMap' if we have the id of Item?

Upvotes: 0

Views: 1062

Answers (2)

Souvik
Souvik

Reputation: 377

Try this below code:

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

Upvotes: 0

Andrey Tyukin
Andrey Tyukin

Reputation: 44967

Build another map from id to category (some irrelevant fields of Item omitted):

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))

Prints: 2 2 3 3.

Upvotes: 1

Related Questions