Merge pull request #9224 from dupirefr/author/BAEL-3981-comparing_objects
[BAEL-3981] Comparing in Java
This commit is contained in:
commit
8c987e89c9
@ -20,7 +20,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-lang3</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
<version>3.9</version>
|
<version>${commons-lang3.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
<version>${guava.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-beanutils</groupId>
|
<groupId>commons-beanutils</groupId>
|
||||||
@ -65,6 +70,8 @@
|
|||||||
<jmh-generator.version>1.19</jmh-generator.version>
|
<jmh-generator.version>1.19</jmh-generator.version>
|
||||||
<assertj.version>3.12.2</assertj.version>
|
<assertj.version>3.12.2</assertj.version>
|
||||||
<commons.beanutils.version>1.9.4</commons.beanutils.version>
|
<commons.beanutils.version>1.9.4</commons.beanutils.version>
|
||||||
|
<commons-lang3.version>3.10</commons-lang3.version>
|
||||||
|
<guava.version>29.0-jre</guava.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class PersonWithEquals {
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
private LocalDate birthDate;
|
||||||
|
|
||||||
|
public PersonWithEquals(String firstName, String lastName) {
|
||||||
|
if (firstName == null || lastName == null) {
|
||||||
|
throw new NullPointerException("Names can't be null");
|
||||||
|
}
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PersonWithEquals(String firstName, String lastName, LocalDate birthDate) {
|
||||||
|
this(firstName, lastName);
|
||||||
|
|
||||||
|
this.birthDate = birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String firstName() {
|
||||||
|
return firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String lastName() {
|
||||||
|
return lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate birthDate() {
|
||||||
|
return birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
PersonWithEquals that = (PersonWithEquals) o;
|
||||||
|
return firstName.equals(that.firstName) &&
|
||||||
|
lastName.equals(that.lastName) &&
|
||||||
|
Objects.equals(birthDate, that.birthDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(firstName, lastName);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class PersonWithEqualsAndComparable implements Comparable<PersonWithEqualsAndComparable> {
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
private LocalDate birthDate;
|
||||||
|
|
||||||
|
public PersonWithEqualsAndComparable(String firstName, String lastName) {
|
||||||
|
if (firstName == null || lastName == null) {
|
||||||
|
throw new NullPointerException("Names can't be null");
|
||||||
|
}
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PersonWithEqualsAndComparable(String firstName, String lastName, LocalDate birthDate) {
|
||||||
|
this(firstName, lastName);
|
||||||
|
|
||||||
|
this.birthDate = birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
PersonWithEqualsAndComparable that = (PersonWithEqualsAndComparable) o;
|
||||||
|
return firstName.equals(that.firstName) &&
|
||||||
|
lastName.equals(that.lastName) &&
|
||||||
|
Objects.equals(birthDate, that.birthDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(firstName, lastName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(PersonWithEqualsAndComparable o) {
|
||||||
|
int lastNamesComparison = this.lastName.compareTo(o.lastName);
|
||||||
|
if (lastNamesComparison == 0) {
|
||||||
|
int firstNamesComparison = this.firstName.compareTo(o.firstName);
|
||||||
|
if (firstNamesComparison == 0) {
|
||||||
|
if (this.birthDate != null && o.birthDate != null) {
|
||||||
|
return this.birthDate.compareTo(o.birthDate);
|
||||||
|
} else if (this.birthDate != null) {
|
||||||
|
return 1;
|
||||||
|
} else if (o.birthDate != null) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return firstNamesComparison;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return lastNamesComparison;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class PersonWithEqualsAndComparableUsingComparator implements Comparable<PersonWithEqualsAndComparableUsingComparator> {
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
private LocalDate birthDate;
|
||||||
|
|
||||||
|
public PersonWithEqualsAndComparableUsingComparator(String firstName, String lastName) {
|
||||||
|
if (firstName == null || lastName == null) {
|
||||||
|
throw new NullPointerException("Names can't be null");
|
||||||
|
}
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PersonWithEqualsAndComparableUsingComparator(String firstName, String lastName, LocalDate birthDate) {
|
||||||
|
this(firstName, lastName);
|
||||||
|
|
||||||
|
this.birthDate = birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String firstName() {
|
||||||
|
return firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String lastName() {
|
||||||
|
return lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate birthDate() {
|
||||||
|
return birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
PersonWithEqualsAndComparableUsingComparator that = (PersonWithEqualsAndComparableUsingComparator) o;
|
||||||
|
return firstName.equals(that.firstName) &&
|
||||||
|
lastName.equals(that.lastName) &&
|
||||||
|
Objects.equals(birthDate, that.birthDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(firstName, lastName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(PersonWithEqualsAndComparableUsingComparator o) {
|
||||||
|
return Comparator.comparing(PersonWithEqualsAndComparableUsingComparator::lastName)
|
||||||
|
.thenComparing(PersonWithEqualsAndComparableUsingComparator::firstName)
|
||||||
|
.thenComparing(PersonWithEqualsAndComparableUsingComparator::birthDate, Comparator.nullsLast(Comparator.naturalOrder()))
|
||||||
|
.compare(this, o);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class PersonWithEqualsAndWrongComparable implements Comparable<PersonWithEqualsAndWrongComparable> {
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
private LocalDate birthDate;
|
||||||
|
|
||||||
|
public PersonWithEqualsAndWrongComparable(String firstName, String lastName) {
|
||||||
|
if (firstName == null || lastName == null) {
|
||||||
|
throw new NullPointerException("Names can't be null");
|
||||||
|
}
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PersonWithEqualsAndWrongComparable(String firstName, String lastName, LocalDate birthDate) {
|
||||||
|
this(firstName, lastName);
|
||||||
|
|
||||||
|
this.birthDate = birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
PersonWithEqualsAndWrongComparable that = (PersonWithEqualsAndWrongComparable) o;
|
||||||
|
return firstName.equals(that.firstName) &&
|
||||||
|
lastName.equals(that.lastName) &&
|
||||||
|
Objects.equals(birthDate, that.birthDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(firstName, lastName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(PersonWithEqualsAndWrongComparable o) {
|
||||||
|
return this.lastName.compareTo(o.lastName);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
public class PersonWithoutEquals {
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
|
||||||
|
public PersonWithoutEquals(String firstName, String lastName) {
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class ApacheCommonsObjectUtilsUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithSameValues_whenApacheCommonsEqualityMethods_thenEqualsTrueNotEqualsFalse() {
|
||||||
|
String a = new String("Hello!");
|
||||||
|
String b = new String("Hello!");
|
||||||
|
|
||||||
|
assertThat(ObjectUtils.equals(a, b)).isTrue();
|
||||||
|
assertThat(ObjectUtils.notEqual(a, b)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithDifferentValues_whenApacheCommonsEqualityMethods_thenEqualsFalseNotEqualsTrue() {
|
||||||
|
String a = new String("Hello!");
|
||||||
|
String b = new String("Hello World!");
|
||||||
|
|
||||||
|
assertThat(ObjectUtils.equals(a, b)).isFalse();
|
||||||
|
assertThat(ObjectUtils.notEqual(a, b)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithConsecutiveValues_whenApacheCommonsCompare_thenNegative() {
|
||||||
|
String first = new String("Hello!");
|
||||||
|
String second = new String("How are you?");
|
||||||
|
|
||||||
|
assertThat(ObjectUtils.compare(first, second)).isNegative();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithSameValues_whenApacheCommonsEqualityMethods_thenEqualsFalseNotEqualsTrue() {
|
||||||
|
String first = new String("Hello!");
|
||||||
|
String second = new String("Hello!");
|
||||||
|
|
||||||
|
assertThat(ObjectUtils.compare(first, second)).isZero();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithConsecutiveValues_whenApacheCommonsCompareReversed_thenPositive() {
|
||||||
|
String first = new String("Hello!");
|
||||||
|
String second = new String("How are you?");
|
||||||
|
|
||||||
|
assertThat(ObjectUtils.compare(second, first)).isPositive();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsOneNull_whenApacheCommonsCompare_thenPositive() {
|
||||||
|
String first = new String("Hello!");
|
||||||
|
String second = null;
|
||||||
|
|
||||||
|
assertThat(ObjectUtils.compare(first, second, false)).isPositive();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,107 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.SortedSet;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class ComparableInterfaceUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoConsecutiveStrings_whenCompareTo_thenNegative() {
|
||||||
|
String first = "Google";
|
||||||
|
String second = "Microsoft";
|
||||||
|
|
||||||
|
assertThat(first.compareTo(second)).isNegative();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoEqualsStrings_whenCompareTo_thenZero() {
|
||||||
|
String first = "Google";
|
||||||
|
String second = "Google";
|
||||||
|
|
||||||
|
assertThat(first.compareTo(second)).isZero();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoConsecutiveStrings_whenReversedCompareTo_thenPositive() {
|
||||||
|
String first = "Google";
|
||||||
|
String second = "Microsoft";
|
||||||
|
|
||||||
|
assertThat(second.compareTo(first)).isPositive();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndWrongComparableAndConsecutiveLastNames_whenCompareTo_thenNegative() {
|
||||||
|
PersonWithEqualsAndWrongComparable richard = new PersonWithEqualsAndWrongComparable("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndWrongComparable joe = new PersonWithEqualsAndWrongComparable("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(richard.compareTo(joe)).isNegative();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndWrongComparableAndSameLastNames_whenReversedCompareTo_thenZero() {
|
||||||
|
PersonWithEqualsAndWrongComparable richard = new PersonWithEqualsAndWrongComparable("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndWrongComparable mike = new PersonWithEqualsAndWrongComparable("Mike", "Jefferson");
|
||||||
|
|
||||||
|
assertThat(richard.compareTo(mike)).isZero();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndWrongComparableAndConsecutiveLastNames_whenReversedCompareTo_thenPositive() {
|
||||||
|
PersonWithEqualsAndWrongComparable richard = new PersonWithEqualsAndWrongComparable("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndWrongComparable joe = new PersonWithEqualsAndWrongComparable("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(joe.compareTo(richard)).isPositive();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndWrongComparableAndSameLastNames_whenSortedSet_thenProblem() {
|
||||||
|
PersonWithEqualsAndWrongComparable richard = new PersonWithEqualsAndWrongComparable("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndWrongComparable mike = new PersonWithEqualsAndWrongComparable("Mike", "Jefferson");
|
||||||
|
|
||||||
|
SortedSet<PersonWithEqualsAndWrongComparable> people = new TreeSet<>();
|
||||||
|
people.add(richard);
|
||||||
|
people.add(mike);
|
||||||
|
|
||||||
|
assertThat(people).containsExactly(richard);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndComparableAndConsecutiveLastNames_whenCompareTo_thenNegative() {
|
||||||
|
PersonWithEqualsAndComparable richard = new PersonWithEqualsAndComparable("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndComparable joe = new PersonWithEqualsAndComparable("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(richard.compareTo(joe)).isNegative();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndComparableAndSameLastNames_whenReversedCompareTo_thenZero() {
|
||||||
|
PersonWithEqualsAndComparable richard = new PersonWithEqualsAndComparable("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndComparable mike = new PersonWithEqualsAndComparable("Mike", "Jefferson");
|
||||||
|
|
||||||
|
assertThat(richard.compareTo(mike)).isPositive();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndComparableAndConsecutiveLastNames_whenReversedCompareTo_thenPositive() {
|
||||||
|
PersonWithEqualsAndComparable richard = new PersonWithEqualsAndComparable("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndComparable joe = new PersonWithEqualsAndComparable("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(joe.compareTo(richard)).isPositive();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndComparableAndSameLastNames_whenSortedSet_thenProblem() {
|
||||||
|
PersonWithEqualsAndComparable richard = new PersonWithEqualsAndComparable("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndComparable mike = new PersonWithEqualsAndComparable("Mike", "Jefferson");
|
||||||
|
|
||||||
|
SortedSet<PersonWithEqualsAndComparable> people = new TreeSet<>();
|
||||||
|
people.add(richard);
|
||||||
|
people.add(mike);
|
||||||
|
|
||||||
|
assertThat(people).containsExactly(mike, richard);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class ComparatorInterfaceUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenListOfTwoPersonWithEqualsAndComparatorByFirstName_whenSort_thenSortedByFirstNames() {
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
PersonWithEquals allan = new PersonWithEquals("Allan", "Dale");
|
||||||
|
|
||||||
|
List<PersonWithEquals> people = new ArrayList<>();
|
||||||
|
people.add(joe);
|
||||||
|
people.add(allan);
|
||||||
|
|
||||||
|
Comparator<PersonWithEquals> compareByFirstNames = new Comparator<PersonWithEquals>() {
|
||||||
|
@Override
|
||||||
|
public int compare(PersonWithEquals o1, PersonWithEquals o2) {
|
||||||
|
return o1.firstName().compareTo(o2.firstName());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
people.sort(compareByFirstNames);
|
||||||
|
|
||||||
|
assertThat(people).containsExactly(allan, joe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenListOfTwoPersonWithEqualsAndComparatorByFirstNameFunctionalStyle_whenSort_thenSortedByFirstNames() {
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
PersonWithEquals allan = new PersonWithEquals("Allan", "Dale");
|
||||||
|
|
||||||
|
List<PersonWithEquals> people = new ArrayList<>();
|
||||||
|
people.add(joe);
|
||||||
|
people.add(allan);
|
||||||
|
|
||||||
|
Comparator<PersonWithEquals> compareByFirstNames = Comparator.comparing(PersonWithEquals::firstName);
|
||||||
|
people.sort(compareByFirstNames);
|
||||||
|
|
||||||
|
assertThat(people).containsExactly(allan, joe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndComparableUsingComparatorAndConsecutiveLastNames_whenCompareTo_thenNegative() {
|
||||||
|
PersonWithEqualsAndComparableUsingComparator richard = new PersonWithEqualsAndComparableUsingComparator("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndComparableUsingComparator joe = new PersonWithEqualsAndComparableUsingComparator("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(richard.compareTo(joe)).isNegative();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndComparableUsingComparatorAndSameLastNames_whenReversedCompareTo_thenZero() {
|
||||||
|
PersonWithEqualsAndComparableUsingComparator richard = new PersonWithEqualsAndComparableUsingComparator("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndComparableUsingComparator mike = new PersonWithEqualsAndComparableUsingComparator("Mike", "Jefferson");
|
||||||
|
|
||||||
|
assertThat(richard.compareTo(mike)).isPositive();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndComparableUsingComparatorAndConsecutiveLastNames_whenReversedCompareTo_thenPositive() {
|
||||||
|
PersonWithEqualsAndComparableUsingComparator richard = new PersonWithEqualsAndComparableUsingComparator("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndComparableUsingComparator joe = new PersonWithEqualsAndComparableUsingComparator("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(joe.compareTo(richard)).isPositive();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsAndComparableUsingComparatorAndSameLastNames_whenSortedSet_thenProblem() {
|
||||||
|
PersonWithEqualsAndComparableUsingComparator richard = new PersonWithEqualsAndComparableUsingComparator("Richard", "Jefferson");
|
||||||
|
PersonWithEqualsAndComparableUsingComparator mike = new PersonWithEqualsAndComparableUsingComparator("Mike", "Jefferson");
|
||||||
|
|
||||||
|
SortedSet<PersonWithEqualsAndComparableUsingComparator> people = new TreeSet<>();
|
||||||
|
people.add(richard);
|
||||||
|
people.add(mike);
|
||||||
|
|
||||||
|
assertThat(people).containsExactly(mike, richard);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,116 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class EqualityOperatorUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntsWithSameValues_whenEqualityOperators_thenConsideredSame() {
|
||||||
|
int a = 1;
|
||||||
|
int b = 1;
|
||||||
|
|
||||||
|
assertThat(a == b).isTrue();
|
||||||
|
assertThat(a != b).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntsWithDifferentValues_whenEqualityOperators_thenNotConsideredSame() {
|
||||||
|
int a = 1;
|
||||||
|
int b = 2;
|
||||||
|
|
||||||
|
assertThat(a == b).isFalse();
|
||||||
|
assertThat(a != b).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntsWithSameValuesOneWrapped_whenEqualityOperators_thenConsideredSame() {
|
||||||
|
int a = 1;
|
||||||
|
Integer b = new Integer(1);
|
||||||
|
|
||||||
|
assertThat(a == b).isTrue();
|
||||||
|
assertThat(a != b).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntsWithDifferentValuesOneWrapped_whenEqualityOperators_thenNotConsideredSame() {
|
||||||
|
int a = 1;
|
||||||
|
Integer b = new Integer(2);
|
||||||
|
|
||||||
|
assertThat(a == b).isFalse();
|
||||||
|
assertThat(a != b).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntegersWithSameValues_whenEqualityOperators_thenNotConsideredSame() {
|
||||||
|
Integer a = new Integer(1);
|
||||||
|
Integer b = new Integer(1);
|
||||||
|
|
||||||
|
assertThat(a == b).isFalse();
|
||||||
|
assertThat(a != b).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntegersWithDifferentValues_whenEqualityOperators_thenNotConsideredSame() {
|
||||||
|
Integer a = new Integer(1);
|
||||||
|
Integer b = new Integer(2);
|
||||||
|
|
||||||
|
assertThat(a == b).isFalse();
|
||||||
|
assertThat(a != b).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntegersWithSameReference_whenEqualityOperators_thenConsideredSame() {
|
||||||
|
Integer a = new Integer(1);
|
||||||
|
Integer b = a;
|
||||||
|
|
||||||
|
assertThat(a == b).isTrue();
|
||||||
|
assertThat(a != b).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntegersFromValueOfWithSameValues_whenEqualityOperators_thenConsideredSame() {
|
||||||
|
Integer a = Integer.valueOf(1);
|
||||||
|
Integer b = Integer.valueOf(1);
|
||||||
|
|
||||||
|
assertThat(a == b).isTrue();
|
||||||
|
assertThat(a != b).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithSameValues_whenEqualityOperators_thenNotConsideredSame() {
|
||||||
|
String a = new String("Hello!");
|
||||||
|
String b = new String("Hello!");
|
||||||
|
|
||||||
|
assertThat(a == b).isFalse();
|
||||||
|
assertThat(a != b).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsFromLiteralsWithSameValues_whenEqualityOperators_thenConsideredSame() {
|
||||||
|
String a = "Hello!";
|
||||||
|
String b = "Hello!";
|
||||||
|
|
||||||
|
assertThat(a == b).isTrue();
|
||||||
|
assertThat(a != b).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoNullObjects_whenEqualityOperators_thenConsideredSame() {
|
||||||
|
Object a = null;
|
||||||
|
Object b = null;
|
||||||
|
|
||||||
|
assertThat(a == b).isTrue();
|
||||||
|
assertThat(a != b).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoObjectsOneNull_whenEqualityOperators_thenNotConsideredSame() {
|
||||||
|
Object a = null;
|
||||||
|
Object b = "Hello!";
|
||||||
|
|
||||||
|
assertThat(a == b).isFalse();
|
||||||
|
assertThat(a != b).isTrue();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
class EqualsMethodUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntegersWithSameValue_whenEquals_thenTrue() {
|
||||||
|
Integer a = new Integer(1);
|
||||||
|
Integer b = new Integer(1);
|
||||||
|
|
||||||
|
assertThat(a.equals(b)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithSameValue_whenEquals_thenTrue() {
|
||||||
|
String a = new String("Hello!");
|
||||||
|
String b = new String("Hello!");
|
||||||
|
|
||||||
|
assertThat(a.equals(b)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithDifferentValue_whenEquals_thenFalse() {
|
||||||
|
String a = new String("Hello!");
|
||||||
|
String b = new String("Hello World!");
|
||||||
|
|
||||||
|
assertThat(a.equals(b)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoObjectsFirstNull_whenEquals_thenNullPointerExceptionThrown() {
|
||||||
|
Object a = null;
|
||||||
|
Object b = new String("Hello!");
|
||||||
|
|
||||||
|
assertThrows(NullPointerException.class, () -> a.equals(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoObjectsSecondNull_whenEquals_thenFalse() {
|
||||||
|
Object a = new String("Hello!");
|
||||||
|
Object b = null;
|
||||||
|
|
||||||
|
assertThat(a.equals(b)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithoutEqualsWithSameNames_whenEquals_thenFalse() {
|
||||||
|
PersonWithoutEquals joe = new PersonWithoutEquals("Joe", "Portman");
|
||||||
|
PersonWithoutEquals joeAgain = new PersonWithoutEquals("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(joe.equals(joeAgain)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsWithSameNames_whenEquals_thenTrue() {
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
PersonWithEquals joeAgain = new PersonWithEquals("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(joe.equals(joeAgain)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWittEqualsWithDifferentNames_whenEquals_thenFalse() {
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
PersonWithEquals natalie = new PersonWithEquals("Natalie", "Portman");
|
||||||
|
|
||||||
|
assertThat(joe.equals(natalie)).isFalse();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import com.google.common.base.Objects;
|
||||||
|
import com.google.common.collect.ComparisonChain;
|
||||||
|
import com.google.common.primitives.Ints;
|
||||||
|
import org.junit.jupiter.api.Nested;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class GuavaUnitTest {
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
class ObjectsEqualMethod {
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithSameValues_whenObjectsEqualMethods_thenTrue() {
|
||||||
|
String a = new String("Hello!");
|
||||||
|
String b = new String("Hello!");
|
||||||
|
|
||||||
|
assertThat(Objects.equal(a, b)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoStringsWithDifferentValues_whenObjectsEqualMethods_thenFalse() {
|
||||||
|
String a = new String("Hello!");
|
||||||
|
String b = new String("Hello World!");
|
||||||
|
|
||||||
|
assertThat(Objects.equal(a, b)).isFalse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
class ComparisonMethods {
|
||||||
|
@Test
|
||||||
|
void givenTwoIntsWithConsecutiveValues_whenIntsCompareMethods_thenNegative() {
|
||||||
|
int first = 1;
|
||||||
|
int second = 2;
|
||||||
|
assertThat(Ints.compare(first, second)).isNegative();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntsWithSameValues_whenIntsCompareMethods_thenZero() {
|
||||||
|
int first = 1;
|
||||||
|
int second = 1;
|
||||||
|
|
||||||
|
assertThat(Ints.compare(first, second)).isZero();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoIntsWithConsecutiveValues_whenIntsCompareMethodsReversed_thenNegative() {
|
||||||
|
int first = 1;
|
||||||
|
int second = 2;
|
||||||
|
|
||||||
|
assertThat(Ints.compare(second, first)).isPositive();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
class ComparisonChainClass {
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEquals_whenComparisonChainByLastNameThenFirstName_thenSortedJoeFirstAndNatalieSecond() {
|
||||||
|
PersonWithEquals natalie = new PersonWithEquals("Natalie", "Portman");
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
|
||||||
|
int comparisonResult = ComparisonChain.start()
|
||||||
|
.compare(natalie.lastName(), joe.lastName())
|
||||||
|
.compare(natalie.firstName(), joe.firstName())
|
||||||
|
.result();
|
||||||
|
|
||||||
|
assertThat(comparisonResult).isPositive();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.baeldung.comparing;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class ObjectsEqualsStaticMethodUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsWithSameNames_whenObjectsEquals_thenTrue() {
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
PersonWithEquals joeAgain = new PersonWithEquals("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(Objects.equals(joe, joeAgain)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsWithDifferentNames_whenObjectsEquals_thenFalse() {
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
PersonWithEquals natalie = new PersonWithEquals("Natalie", "Portman");
|
||||||
|
|
||||||
|
assertThat(Objects.equals(joe, natalie)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoPersonWithEqualsFirstNull_whenObjectsEquals_thenFalse() {
|
||||||
|
PersonWithEquals nobody = null;
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
|
||||||
|
assertThat(Objects.equals(nobody, joe)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoObjectsSecondtNull_whenObjectsEquals_thenFalse() {
|
||||||
|
PersonWithEquals joe = new PersonWithEquals("Joe", "Portman");
|
||||||
|
PersonWithEquals nobody = null;
|
||||||
|
|
||||||
|
assertThat(Objects.equals(joe, nobody)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTwoObjectsNull_whenObjectsEquals_thenTrue() {
|
||||||
|
PersonWithEquals nobody = null;
|
||||||
|
PersonWithEquals nobodyAgain = null;
|
||||||
|
|
||||||
|
assertThat(Objects.equals(nobody, nobodyAgain)).isTrue();
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user