Scala List
class FAQ: How do I create a List in Scala? (Also asked as, how do I create and initially populate a List
in Scala?)
You can create a Scala List in several different ways, including these approaches:
- Lisp style
- Java style
- Using the List class
range
method - Using the List class
fill
method - Using the List class
tabulate
method
In this Scala List
tutorial, I'll demonstrate each of these approaches. I'll execute each command in the Scala command-line interpreter so you can see the results of each approach.
Create a Scala List in the Lisp style
First, if you prefer the Lisp-style of programming, you can create a Scala List
using the “cons” syntax, like this:
scala> val list = 1 :: 2 :: 3 :: Nil list: List[Int] = List(1, 2, 3)
As you can see, this creates a List
that contains the integers 1, 2, and 3. With this approach, you need to end the list with the Nil
object.
In this “cons” style, the ::
method takes two arguments, a “head,” which is a single element, and a “tail,” which is a List
. (And yes, ::
is a function/method.)
Arguably using this style can also be thought of as a Haskell or functional programming (FP) style. But I first learned about the
::
approach many years ago with Lisp.
Create a Scala List in the Java style
My guess is that the most popular way to create a List
is with what I call the "Java style":
scala> val list = List(1,2,3) x: List[Int] = List(1, 2, 3)
This syntax looks a lot like the Java way to create an object, except (a) you don't need the "new" keyword before the List
, and (b) you don't have to declare the type of elements in the List
.
Note that if you're going to mix types in a List
constructor, you may need to manually specify the type of the List
. This example demonstrates the syntax to specify the List
type:
scala> val x = List[Number](1, 2.0, 33d, 0x1) x: List[java.lang.Number] = List(1, 2.0, 33.0, 1)
In this example I've explicitly stated that the values in the List
are of the Number
type.
Create a Scala List with the ‘range’ method
Another convenient way to create a List
is with the range method:
scala> val x = List.range(1, 10) x: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
As you can see, this example creates a List
of Int
values, beginning at 1, and ending at 9.
In addition to this simple approach, the range
function can also take a third argument, which serves as a "step" value when creating the List
:
scala> val x = List.range(0, 10, 2) x: List[Int] = List(0, 2, 4, 6, 8)
Create a Scala List with the List class ‘fill’ method
Another convenient way to create a Scala List
is with the fill method:
scala> val x = List.fill(3)("foo") x: List[java.lang.String] = List(foo, foo, foo)
As you can see, you just specify how many items you want, and the object value you want to fill each List
element with.
Create a Scala List with the List class ‘tabulate’ method
Finally, you can create a Scala List with the tabulate
method of the List
class.
The tabulate method creates a new List
whose elements are created according to the function you supply. The book Programming in Scala shows how to create a List
using a simple "squares" function with the tabulate
method:
scala> val x = List.tabulate(5)(n => n * n) x: List[Int] = List(0, 1, 4, 9, 16)
As you can see, that example creates a List
of five elements, where the element values are the square of the index of each element, so 0 becomes 0, 1 becomes 1, 2 becomes 4, 3 becomes 9, and 4 becomes 16.
Creating Scala Lists: Summary
In summary, as you have seen, you can create Scala lists in several different ways, including these approaches:
- Lisp style
- Java style
- Using the List class range method
- Using the List class fill method
- Using the List class tabulate method
I hope this Scala List
class tutorial has been helpful.