1. Overview

In this tutorial, we’ll see different ways that we can query the mappings in a Scala Map.

2. Querying Mappings in Maps

Given an existing Scala Map, there are a few different checks we may want to perform:

  • if a given key exists
  • if a value exists in the Map
  • if a given mapping pair (key, value) exists

Next, let’s see how we can achieve this using the following Map:

scala> val m = Map(1 -> "a", 2 -> "b", 3 -> "c")
m: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c)

2.1. Check if a Given Key Exists

This is the most common query we do on a Map. The easiest approach is to use the isDefinedAt() or contains() methods:

scala> m.isDefinedAt(1)
res0: Boolean = true

scala> m.isDefinedAt(4)
res1: Boolean = false

scala> m.contains(1)
res2: Boolean = true

scala> m.contains(4)
res3: Boolean = false

Alternatively, we can access the KeySet and query it as well:

scala> m.keySet.contains(1)
res4: Boolean = true

scala> m.keySet.contains(4)
res5: Boolean = false

In this approach, we get the Set of all keys of the Map, and then look for our specific key.

2.2. Check if a Given Value Exists

If we want to know if a given value exists in the map, we can query its values:

scala> m.values.exists(_ == "a")
res0: Boolean = true

scala> m.values.exists(_ == "d")
res1: Boolean = false

Another option is to just query the Map directly without asking for the values:

scala> m.exists(_._2 == "a")
res0: Boolean = true

scala> m.exists(_._2 == "d")
res1: Boolean = false

Let’s make this more readable:

scala> m.exists{ case(key, value) => value == "a" }
res2: Boolean = true

We should be aware that a Map may contain more than one entry with the specified value. In such cases, we need to adapt our code depending on our goal.

2.3. Check if a Given (key, value) Pair Exists

Finally, let’s see how we can check if the Map has a mapping with a specific key and value pair:

scala> m.exists{ case(key, value) => (key, value) == (1, "a") }
res0: Boolean = true

scala> m.exists{ case(key, value) => (key, value) == (1, "b") }
res1: Boolean = false

We can express this more succinctly:

scala> m.exists(pair => pair  == (1, "a"))
res2: Boolean = true

scala> m.exists(pair => pair  == (1, "c"))
res3: Boolean = false

3. Conclusion

In this article, we saw how to query a given Map to determine if a key, a value, or a key-value pair are present by using the available methods including. We discussed approaches using the Map.contains(), Map.values(), and Map.exists() methods.

guest
0 Comments
Inline Feedbacks
View all comments