From 41964ef72e4a54bff1e79ff10592b92838af5f41 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Wed, 12 Aug 2020 00:58:10 +0430 Subject: [PATCH] Fixed the "Comparator and Comparable in Java" Article --- .../java/com/baeldung/comparable/Player.java | 2 +- .../comparator/PlayerAgeComparator.java | 2 +- .../comparator/PlayerRankingComparator.java | 2 +- .../AvoidingSubtractionUnitTest.java | 26 +++++++++++++++++++ .../comparator/Java8ComparatorUnitTest.java | 8 +++--- 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 core-java-modules/core-java-lang/src/test/java/com/baeldung/comparator/AvoidingSubtractionUnitTest.java diff --git a/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparable/Player.java b/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparable/Player.java index 68a78980f3..74d9a7577e 100644 --- a/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparable/Player.java +++ b/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparable/Player.java @@ -45,7 +45,7 @@ public class Player implements Comparable { @Override public int compareTo(Player otherPlayer) { - return (this.getRanking() - otherPlayer.getRanking()); + return Integer.compare(getRanking(), otherPlayer.getRanking()); } } diff --git a/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java b/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java index d2e7ca1f42..56e2163f3c 100644 --- a/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java +++ b/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java @@ -6,7 +6,7 @@ public class PlayerAgeComparator implements Comparator { @Override public int compare(Player firstPlayer, Player secondPlayer) { - return (firstPlayer.getAge() - secondPlayer.getAge()); + return Integer.compare(firstPlayer.getAge(), secondPlayer.getAge()); } } diff --git a/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java b/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java index 2d42698843..56aa38d11a 100644 --- a/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java +++ b/core-java-modules/core-java-lang/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java @@ -6,7 +6,7 @@ public class PlayerRankingComparator implements Comparator { @Override public int compare(Player firstPlayer, Player secondPlayer) { - return (firstPlayer.getRanking() - secondPlayer.getRanking()); + return Integer.compare(firstPlayer.getRanking(), secondPlayer.getRanking()); } } diff --git a/core-java-modules/core-java-lang/src/test/java/com/baeldung/comparator/AvoidingSubtractionUnitTest.java b/core-java-modules/core-java-lang/src/test/java/com/baeldung/comparator/AvoidingSubtractionUnitTest.java new file mode 100644 index 0000000000..fcca743ca1 --- /dev/null +++ b/core-java-modules/core-java-lang/src/test/java/com/baeldung/comparator/AvoidingSubtractionUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.comparator; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class AvoidingSubtractionUnitTest { + + @Test + public void givenTwoPlayers_whenUsingSubtraction_thenOverflow() { + Comparator comparator = (p1, p2) -> p1.getRanking() - p2.getRanking(); + Player player1 = new Player(59, "John", Integer.MAX_VALUE); + Player player2 = new Player(67, "Roger", -1); + + List players = Arrays.asList(player1, player2); + players.sort(comparator); + System.out.println(players); + + assertEquals("John", players.get(0).getName()); + assertEquals("Roger", players.get(1).getName()); + } +} diff --git a/core-java-modules/core-java-lang/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java b/core-java-modules/core-java-lang/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java index 49c8749309..dac05a85b1 100644 --- a/core-java-modules/core-java-lang/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java +++ b/core-java-modules/core-java-lang/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java @@ -1,14 +1,14 @@ package com.baeldung.comparator; -import static org.junit.Assert.assertEquals; +import org.junit.Before; +import org.junit.Test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.assertEquals; public class Java8ComparatorUnitTest { @@ -28,7 +28,7 @@ public class Java8ComparatorUnitTest { @Test public void whenComparing_UsingLambda_thenSorted() { System.out.println("************** Java 8 Comaparator **************"); - Comparator byRanking = (Player player1, Player player2) -> player1.getRanking() - player2.getRanking(); + Comparator byRanking = (Player player1, Player player2) -> Integer.compare(player1.getRanking(), player2.getRanking()); System.out.println("Before Sorting : " + footballTeam); Collections.sort(footballTeam, byRanking);