3.1. Looping with for and foreach
Problem
You want to iterate over the elements in a collection, either to operate on each element in the collection, or to create a new collection from the existing collection.
Solution
There are many ways to loop over Scala collections, including
for
loops, while
loops, and collection methods like
foreach
, map
, flatMap
, and more. This solution focuses
primarily on the for
loop and
foreach
method.
Given a simple array:
val
a
=
Array
(
"apple"
,
"banana"
,
"orange"
)
I prefer to iterate over the array with the following for
loop syntax, because it’s clean and easy
to remember:
scala> for (e <- a) println(e)
apple
banana
orange
When your algorithm requires multiple lines, use the same for
loop syntax, and perform your work in a
block:
scala>for (e <- a) {
|// imagine this requires multiple lines
|val s = e.toUpperCase
|println(s)
|}
APPLE BANANA ORANGE
Returning values from a for loop
Those examples perform an operation using the elements in an
array, but they don’t return a value you can use, such as a new array.
In cases where you want to build a new collection from the input
collection, use the for
/yield
combination:
scala> val newArray = for (e <- a) yield e.toUpperCase
newArray: Array[java.lang.String] = Array(APPLE, BANANA, ORANGE)
The for
/yield
construct
returns a value, so in this case, the array newArray
contains uppercase versions of the
three strings in the initial array. Notice that an input Array
yields an Array
(and not something else, like a
Vector ...
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.