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)