Scala Maps and Option

Look up a key without nulls by using Option.

Scala
object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Ada" -> 36, "Grace" -> 45)
    println(ages.get("Ada"))
    println(ages.get("Linus"))
    println(ages.getOrElse("Linus", 0))
  }
}
Output
Some(36)
None
0

Explanation

Map("Ada" -> 36) builds an immutable map from key-value pairs. Instead of returning null for a missing key, get returns an Option: Some(value) if the key exists, or None if it does not.

Because the possibility of absence is part of the type, the compiler makes you handle it. getOrElse offers a fallback in one step.

Explore the dry run
Guided walkthroughReady
1object Main {
2 def main(args: Array[String]): Unit = {
3 val ages = Map("Ada" -> 36, "Grace" -> 45)
4 println(ages.get("Ada"))
5 println(ages.get("Linus"))
6 println(ages.getOrElse("Linus", 0))
7 }
8}

Follow the example

Start to inspect the source, values, and output. These prepared steps explain the published sample; grouped loop steps describe multiple iterations.

View the complete dry-run table
Prepared trace of the published program. Some rows group repeated iterations.
Step / lineWhat happensState after stepOutput so far
An immutable map with two entries.—
—
The key exists, so the result is wrapped in Some.—
Some(36)
The key is absent, so the result is None.—
Some(36)
None
Use the fallback value for the missing key.—
Some(36)
None
0

Cost and common mistakes

Lookup is effectively constant time for the default immutable hash map.

  • Calling ages("Linus") instead of get throws NoSuchElementException for a missing key.
  • Adding to an immutable Map with + returns a new map; the original is unchanged.

Try it yourself

Predict ages.get("Grace").map(a => a + 1).

Reveal answer and reasoning

Some(46); map applies the function only when a value is present.

Further reading