11.21. Filtering a Map
Problem
You want to filter the elements contained in a map, either by directly modifying a mutable map, or by applying a filtering algorithm on an immutable map to create a new map.
Solution
Use the retain method to define
the elements to retain when using a mutable map, and use filterKeys or filter to filter the elements in a mutable or
immutable map, remembering to assign the result to a new
variable.
Mutable maps
You can filter the elements in a mutable
map using the retain method to
specify which elements should be retained:
scala>var x = collection.mutable.Map(1 -> "a", 2 -> "b", 3 -> "c")x: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 1 -> a, 3 -> c) scala>x.retain((k,v) => k > 1)res0: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 3 -> c) scala>xres1: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 3 -> c)
As shown, retain modifies a
mutable map in place. As implied by the anonymous function signature
used in that example:
(k,v) => ...
your algorithm can test both the key and value of each element to decide which elements to retain in the map.
In a related note, the transform method doesn’t filter a map, but
it lets you transform the elements in a mutable map:
scala>x.transform((k,v) => v.toUpperCase)res0: scala.collection.mutable.Map[Int,String] = Map(2 -> B, 3 -> C) scala>xres1: scala.collection.mutable.Map[Int,String] = Map(2 -> B, 3 -> C)
Depending on your definition of “filter,” you can also remove elements from a map using ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access