10.14. Transforming One Collection to Another with map
Problem
Like the previous recipe, you want to transform one collection into another by applying an algorithm to every element in the original collection.
Solution
Rather than using the
for
/yield
combination shown in the
previous recipe, call the map
method
on your collection, passing it a function, an anonymous function, or
method to transform each element. This is shown in the following
examples, where each String
in a
List
is converted to begin with a
capital letter:
scala>val helpers = Vector("adam", "kim", "melissa")
helpers: scala.collection.immutable.Vector[java.lang.String] = Vector(adam, kim, melissa) // the long form scala>val caps = helpers.map(e => e.capitalize)
caps: scala.collection.immutable.Vector[String] = Vector(Adam, Kim, Melissa) // the short form scala>val caps = helpers.map(_.capitalize)
caps: scala.collection.immutable.Vector[String] = Vector(Adam, Kim, Melissa)
The next example shows that an array of String
can be converted to an array of
Int
:
scala>val names = Array("Fred", "Joe", "Jonathan")
names: Array[java.lang.String] = Array(Fred, Joe, Jonathan) scala>val lengths = names.map(_.length)
lengths: Array[Int] = Array(4, 3, 8)
The map
method comes in handy
if you want to convert a collection to a list of XML elements:
scala>val nieces = List("Aleka", "Christina", "Molly")
nieces: List[String] = List(Aleka, Christina, Molly) scala>val elems = nieces.map(niece => <li>{niece}</li>)
elems: List[scala.xml.Elem] ...
Get Scala Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.