Occasionally, you need to combine two lists (or arrays or vectors or sequences) into one. List.++
to the rescue! (Along with Array.++
, and Vector.++, and Seq.++
.)
A widow Carol has three daughters: Marcia, Jan, and Cindy.
val ladies = List("Carol", "Marcia", "Jan", "Cindy")
A widower Mike has three sons: Greg, Peter, and Bobby.
val fellas = List("Mike", "Greg", "Peter", "Bobby")
That lovely lady meets that fellow, and they know it is much more than a hunch. They marry and form a family:
val bunch = ladies ++ fellas // bunch: List[String] = // List(Carol, Marcia, Jan, Cindy, // Mike, Greg, Peter, Bobby)
Of course, as you probably have guessed, order matters. Let’s reverse the arguments:
val bunch2 = fellas ++ ladies // bunch2: List[String] = // List(Mike, Greg, Peter, Bobby, // Carol, Marcia, Jan, Cindy)
You can also use ++
to chain a series of lists together:
val hobbits = List("Frodo", "Sam", "Pippin", "Merry") val men = List("Aragorn", "Boromir") val dwarves = List("Gimli") val elves = List("Legolas") val maiar = List("Gandalf") val fellowship = hobbits ++ men ++ dwarves ++ elves ++ maiar // fellowship: List[String] = // List(Frodo, Sam, Pippin, Merry, Aragorn, // Boromir, Gimli, Legolas, Gandalf)
And there’s nothing special about ++
in this regard. Because Scala allows infix notation, you can similarly chain other operations together:
val fellowslip = hobbits ++ men ++ dwarves ++ elves ++ maiar filter { !_.startsWith("G") } map { _.toUpperCase } // fellowslip: List[String] = // List(FRODO, SAM, PIPPIN, MERRY, // ARAGORN, BOROMIR, LEGOLAS)