10.28. Sorting a Collection
Problem
You want to sort a sequential collection. Or, you want to
implement the Ordered
trait in a
custom class so you can use the sorted
method, or operators like <
, <=
, >
, and >=
to compare instances of your
class.
Solution
See Recipe 11.10,
for information on how to sort an Array
. Otherwise, use the sorted
or sortWith
methods to sort a
collection.
The sorted
method can sort
collections with type Double
,
Float
, Int
, and any other type that has an implicit
scala.math.Ordering
:
scala>val a = List(10, 5, 8, 1, 7).sorted
a: List[Int] = List(1, 5, 7, 8, 10) scala>val b = List("banana", "pear", "apple", "orange").sorted
b: List[String] = List(apple, banana, orange, pear)
The “rich” versions of the numeric classes (like RichInt
) and the StringOps
class all extend the Ordered
trait, so they can be used with the
sorted
method. (More on the Ordered
trait in the Discussion.)
The sortWith
method lets you
provide your own sorting function. The following examples demonstrate
how to sort a collection of Int
or
String
in both directions:
scala>List(10, 5, 8, 1, 7).sortWith(_ < _)
res1: List[Int] = List(1, 5, 7, 8, 10) scala>List(10, 5, 8, 1, 7).sortWith(_ > _)
res2: List[Int] = List(10, 8, 7, 5, 1) scala>List("banana", "pear", "apple", "orange").sortWith(_ < _)
res3: List[java.lang.String] = List(apple, banana, orange, pear) scala>List("banana", "pear", "apple", "orange").sortWith(_ > _)
res4: List[java.lang.String] = List(pear, orange, banana, apple)
Your sorting function ...
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.