Skip to content

Commit bd29f02

Browse files
authored
SCALA-53 sorting (#36)
* sorting example * use given when then format
1 parent 1213eb1 commit bd29f02

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.baeldung.scala
2+
3+
import org.junit.Test
4+
import org.scalatest.{Matchers, WordSpec}
5+
6+
class SortingUnitTest extends WordSpec with Matchers {
7+
8+
case class User(name: String, age: Int) extends Ordered[User] {
9+
override def compare(that: User): Int =
10+
java.lang.Integer.compare(age, that.age)
11+
}
12+
13+
val users = List(
14+
User("Mike", 43),
15+
User("Mike", 16),
16+
User("Kelly", 21)
17+
)
18+
19+
@Test
20+
def givenUsers_whenSorted_thenSortUsingOrdered(): Unit = {
21+
users.sorted shouldBe List(
22+
User("Mike", 16),
23+
User("Kelly", 21),
24+
User("Mike", 43),
25+
)
26+
}
27+
28+
@Test
29+
def givenUsers_whenSorted_thenSortUsingOrdering(): Unit = {
30+
implicit val userOrdering: Ordering[User] = Ordering.by(_.age)
31+
32+
users.sorted shouldBe List(
33+
User("Mike", 16),
34+
User("Kelly", 21),
35+
User("Mike", 43),
36+
)
37+
}
38+
39+
@Test
40+
def givenUsers_whenSorted_thenSortUsingReverseOrdering(): Unit = {
41+
implicit val userOrdering: Ordering[User] = Ordering.by[User, Int](_.age).reverse
42+
43+
users.sorted shouldBe List(
44+
User("Mike", 43),
45+
User("Kelly", 21),
46+
User("Mike", 16),
47+
)
48+
}
49+
50+
@Test
51+
def givenUsers_whenSortBy_thenSortByField(): Unit = {
52+
users.sortBy(_.name) shouldBe List(
53+
User("Kelly", 21),
54+
User("Mike", 43),
55+
User("Mike", 16),
56+
)
57+
}
58+
59+
@Test
60+
def givenUsers_whenSortWith_thenSortWithCompareFunction(): Unit = {
61+
users.sortWith(_.age > _.age) shouldBe List(
62+
User("Mike", 43),
63+
User("Kelly", 21),
64+
User("Mike", 16),
65+
)
66+
}
67+
68+
@Test
69+
def givenUsers_whenSortBy_thenSortByMultipleFields(): Unit = {
70+
users.sortBy(u => (u.name, u.age)) shouldBe List(
71+
User("Kelly", 21),
72+
User("Mike", 16),
73+
User("Mike", 43),
74+
)
75+
}
76+
}

0 commit comments

Comments
 (0)