Skip to content

Commit c89879c

Browse files
authored
Merge pull request eugenp#3032 from gschambial/master
BAEL-1331 - Quick Example: Comparator vs Comparable in Java
2 parents fb8f07c + 8af39bf commit c89879c

File tree

10 files changed

+344
-0
lines changed

10 files changed

+344
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.baeldung.comparable;
2+
3+
public class Player implements Comparable<Player> {
4+
5+
private int ranking;
6+
7+
private String name;
8+
9+
private int age;
10+
11+
public Player(int ranking, String name, int age) {
12+
this.ranking = ranking;
13+
this.name = name;
14+
this.age = age;
15+
}
16+
17+
public int getRanking() {
18+
return ranking;
19+
}
20+
21+
public void setRanking(int ranking) {
22+
this.ranking = ranking;
23+
}
24+
25+
public String getName() {
26+
return name;
27+
}
28+
29+
public void setName(String name) {
30+
this.name = name;
31+
}
32+
33+
public int getAge() {
34+
return age;
35+
}
36+
37+
public void setAge(int age) {
38+
this.age = age;
39+
}
40+
41+
@Override
42+
public String toString() {
43+
return this.name;
44+
}
45+
46+
@Override
47+
public int compareTo(Player otherPlayer) {
48+
return (this.getRanking() - otherPlayer.getRanking());
49+
}
50+
51+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.baeldung.comparable;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
7+
public class PlayerSorter {
8+
9+
public static void main(String[] args) {
10+
11+
List<Player> footballTeam = new ArrayList<Player>();
12+
Player player1 = new Player(59, "John", 20);
13+
Player player2 = new Player(67, "Roger", 22);
14+
Player player3 = new Player(45, "Steven", 24);
15+
footballTeam.add(player1);
16+
footballTeam.add(player2);
17+
footballTeam.add(player3);
18+
19+
System.out.println("Before Sorting : " + footballTeam);
20+
Collections.sort(footballTeam);
21+
System.out.println("After Sorting : " + footballTeam);
22+
23+
}
24+
25+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.baeldung.comparator;
2+
3+
public class Player {
4+
5+
private int ranking;
6+
7+
private String name;
8+
9+
private int age;
10+
11+
public Player(int ranking, String name, int age) {
12+
this.ranking = ranking;
13+
this.name = name;
14+
this.age = age;
15+
}
16+
17+
public int getRanking() {
18+
return ranking;
19+
}
20+
21+
public void setRanking(int ranking) {
22+
this.ranking = ranking;
23+
}
24+
25+
public String getName() {
26+
return name;
27+
}
28+
29+
public void setName(String name) {
30+
this.name = name;
31+
}
32+
33+
public int getAge() {
34+
return age;
35+
}
36+
37+
public void setAge(int age) {
38+
this.age = age;
39+
}
40+
41+
@Override
42+
public String toString() {
43+
return this.name;
44+
}
45+
46+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.baeldung.comparator;
2+
3+
import java.util.Comparator;
4+
5+
public class PlayerAgeComparator implements Comparator<Player> {
6+
7+
@Override
8+
public int compare(Player firstPlayer, Player secondPlayer) {
9+
return (firstPlayer.getAge() - secondPlayer.getAge());
10+
}
11+
12+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.baeldung.comparator;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
7+
public class PlayerAgeSorter {
8+
9+
public static void main(String[] args) {
10+
11+
List<Player> footballTeam = new ArrayList<Player>();
12+
Player player1 = new Player(59, "John", 22);
13+
Player player2 = new Player(67, "Roger", 20);
14+
Player player3 = new Player(45, "Steven", 24);
15+
footballTeam.add(player1);
16+
footballTeam.add(player2);
17+
footballTeam.add(player3);
18+
19+
System.out.println("Before Sorting : " + footballTeam);
20+
//Instance of PlayerAgeComparator
21+
PlayerAgeComparator playerComparator = new PlayerAgeComparator();
22+
Collections.sort(footballTeam, playerComparator);
23+
System.out.println("After Sorting by age : " + footballTeam);
24+
25+
}
26+
27+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.baeldung.comparator;
2+
3+
import java.util.Comparator;
4+
5+
public class PlayerRankingComparator implements Comparator<Player> {
6+
7+
@Override
8+
public int compare(Player firstPlayer, Player secondPlayer) {
9+
return (firstPlayer.getRanking() - secondPlayer.getRanking());
10+
}
11+
12+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.baeldung.comparator;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
7+
public class PlayerRankingSorter {
8+
9+
public static void main(String[] args) {
10+
11+
List<Player> footballTeam = new ArrayList<Player>();
12+
Player player1 = new Player(59, "John", 22);
13+
Player player2 = new Player(67, "Roger", 20);
14+
Player player3 = new Player(45, "Steven", 40);
15+
footballTeam.add(player1);
16+
footballTeam.add(player2);
17+
footballTeam.add(player3);
18+
19+
System.out.println("Before Sorting : " + footballTeam);
20+
//Instance of PlayerRankingComparator
21+
PlayerRankingComparator playerComparator = new PlayerRankingComparator();
22+
Collections.sort(footballTeam, playerComparator);
23+
System.out.println("After Sorting by ranking : " + footballTeam);
24+
25+
}
26+
27+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.baeldung.comparable;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.util.ArrayList;
6+
import java.util.Collections;
7+
import java.util.List;
8+
9+
import org.junit.Test;
10+
11+
public class ComparableUnitTest {
12+
13+
@Test
14+
public void whenUsingComparable_thenSortedList() {
15+
List<Player> footballTeam = new ArrayList<Player>();
16+
Player player1 = new Player(59, "John", 20);
17+
Player player2 = new Player(67, "Roger", 22);
18+
Player player3 = new Player(45, "Steven", 24);
19+
footballTeam.add(player1);
20+
footballTeam.add(player2);
21+
footballTeam.add(player3);
22+
Collections.sort(footballTeam);
23+
assertEquals(footballTeam.get(0)
24+
.getName(), "Steven");
25+
assertEquals(footballTeam.get(2)
26+
.getRanking(), 67);
27+
}
28+
29+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.baeldung.comparator;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.util.ArrayList;
6+
import java.util.Collections;
7+
import java.util.List;
8+
9+
import org.junit.Before;
10+
import org.junit.Test;
11+
12+
public class ComparatorUnitTest {
13+
14+
List<Player> footballTeam;
15+
16+
@Before
17+
public void setUp() {
18+
footballTeam = new ArrayList<Player>();
19+
Player player1 = new Player(59, "John", 20);
20+
Player player2 = new Player(67, "Roger", 22);
21+
Player player3 = new Player(45, "Steven", 24);
22+
footballTeam.add(player1);
23+
footballTeam.add(player2);
24+
footballTeam.add(player3);
25+
}
26+
27+
@Test
28+
public void whenUsingRankingComparator_thenSortedList() {
29+
PlayerRankingComparator playerComparator = new PlayerRankingComparator();
30+
Collections.sort(footballTeam, playerComparator);
31+
assertEquals(footballTeam.get(0)
32+
.getName(), "Steven");
33+
assertEquals(footballTeam.get(2)
34+
.getRanking(), 67);
35+
}
36+
37+
@Test
38+
public void whenUsingAgeComparator_thenSortedList() {
39+
PlayerAgeComparator playerComparator = new PlayerAgeComparator();
40+
Collections.sort(footballTeam, playerComparator);
41+
assertEquals(footballTeam.get(0)
42+
.getName(), "John");
43+
assertEquals(footballTeam.get(2)
44+
.getRanking(), 45);
45+
}
46+
47+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.baeldung.comparator;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.util.ArrayList;
6+
import java.util.Collections;
7+
import java.util.Comparator;
8+
import java.util.List;
9+
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
13+
public class Java8ComparatorUnitTest {
14+
15+
List<Player> footballTeam;
16+
17+
@Before
18+
public void setUp() {
19+
footballTeam = new ArrayList<Player>();
20+
Player player1 = new Player(59, "John", 22);
21+
Player player2 = new Player(67, "Roger", 20);
22+
Player player3 = new Player(45, "Steven", 24);
23+
footballTeam.add(player1);
24+
footballTeam.add(player2);
25+
footballTeam.add(player3);
26+
}
27+
28+
@Test
29+
public void whenComparing_UsingLambda_thenSorted() {
30+
System.out.println("************** Java 8 Comaparator **************");
31+
Comparator<Player> byRanking = (Player player1, Player player2) -> player1.getRanking() - player2.getRanking();
32+
33+
System.out.println("Before Sorting : " + footballTeam);
34+
Collections.sort(footballTeam, byRanking);
35+
System.out.println("After Sorting : " + footballTeam);
36+
assertEquals(footballTeam.get(0)
37+
.getName(), "Steven");
38+
assertEquals(footballTeam.get(2)
39+
.getRanking(), 67);
40+
}
41+
42+
@Test
43+
public void whenComparing_UsingComparatorComparing_thenSorted() {
44+
System.out.println("********* Comaparator.comparing method *********");
45+
System.out.println("********* byRanking *********");
46+
Comparator<Player> byRanking = Comparator.comparing(Player::getRanking);
47+
48+
System.out.println("Before Sorting : " + footballTeam);
49+
Collections.sort(footballTeam, byRanking);
50+
System.out.println("After Sorting : " + footballTeam);
51+
assertEquals(footballTeam.get(0)
52+
.getName(), "Steven");
53+
assertEquals(footballTeam.get(2)
54+
.getRanking(), 67);
55+
56+
System.out.println("********* byAge *********");
57+
Comparator<Player> byAge = Comparator.comparing(Player::getAge);
58+
59+
System.out.println("Before Sorting : " + footballTeam);
60+
Collections.sort(footballTeam, byAge);
61+
System.out.println("After Sorting : " + footballTeam);
62+
assertEquals(footballTeam.get(0)
63+
.getName(), "Roger");
64+
assertEquals(footballTeam.get(2)
65+
.getRanking(), 45);
66+
}
67+
68+
}

0 commit comments

Comments
 (0)