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
1
object 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
| Step / line | What happens | State after step | Output 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.