How to convert a Scala collection to a String with mkString

This is an excerpt from the Scala Cookbook (partially modified for the internet). This is Recipe 10.29, “How to Convert a Scala Collection to a String with mkString”

Problem

You want to convert elements of a collection to a String, possibly adding a field separator, prefix, and suffix.

Solution

Use the mkString method to print a collection as a String. Given a simple collection:

val a = Array("apple", "banana", "cherry")

you can print the collection elements using mkString:

scala> a.mkString
res1: String = applebananacherry

That output doesn’t look too good, so add a separator:

scala> a.mkString(" ")
res2: String = apple banana cherry

That’s better. Use a comma and a space to create a CSV string:

scala> a.mkString(", ")
res3: String = apple, banana, cherry

The mkString method is overloaded, so you can also add a prefix and suffix:

scala> a.mkString("[", ", ", "]")
res4: String = [apple, banana, cherry]

If you happen to have a list of lists that you want to convert to a String, such as the following array of arrays, first flatten the collection, and then call mkString:

scala> val a = Array(Array("a", "b"), Array("c", "d"))
a: Array[Array[java.lang.String]] = Array(Array(a, b), Array(c, d))

scala> a.flatten.mkString(", ")
res5: String = a, b, c, d

Discussion

You can also use the toString method on a collection, but it returns the name of the collection with the elements in the collection listed inside parentheses:

scala> val v = Vector("apple", "banana", "cherry")
v: scala.collection.immutable.Vector[String] = Vector(apple, banana, cherry)

scala> v.toString
res0: String = Vector(apple, banana, cherry)

The Scala Cookbook

This tutorial is sponsored by the Scala Cookbook, which I wrote for O’Reilly:

You can find the Scala Cookbook at these locations:

Add new comment

The content of this field is kept private and will not be shown publicly.

Anonymous format

  • Allowed HTML tags: <em> <strong> <cite> <code> <ul type> <ol start type> <li> <pre>
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.