From ce79066afc6b20c1d2d9dbd09dc8cc34e096f300 Mon Sep 17 00:00:00 2001 From: Bhaskar Ghosh Dastidar Date: Sat, 6 May 2023 21:58:20 +0530 Subject: [PATCH] [BAEL-6253] record equals hashcode (#13958) * [BAEL-6253] records equals and hashcode * [BAEL-6253] records equals and hashcode * [BAEL-6253] records equals and hashcode test case --------- Co-authored-by: Bhaskar --- core-java-modules/core-java-records/pom.xml | 32 +++++++++++++++++++ .../baeldung/equalshashcoderecords/Movie.java | 26 +++++++++++++++ .../equalshashcoderecords/Person.java | 5 +++ .../CustomRecordEqualsHashCode.java | 30 +++++++++++++++++ core-java-modules/pom.xml | 1 + 5 files changed, 94 insertions(+) create mode 100644 core-java-modules/core-java-records/pom.xml create mode 100644 core-java-modules/core-java-records/src/main/java/com/baeldung/equalshashcoderecords/Movie.java create mode 100644 core-java-modules/core-java-records/src/main/java/com/baeldung/equalshashcoderecords/Person.java create mode 100644 core-java-modules/core-java-records/src/test/java/com/baeldung/equalshashcoderecords/CustomRecordEqualsHashCode.java diff --git a/core-java-modules/core-java-records/pom.xml b/core-java-modules/core-java-records/pom.xml new file mode 100644 index 0000000000..ed9a36fc14 --- /dev/null +++ b/core-java-modules/core-java-records/pom.xml @@ -0,0 +1,32 @@ + + + + core-java-modules + com.baeldung.core-java-modules + 0.0.1-SNAPSHOT + + 4.0.0 + + core-java-records + + + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + + + + + + 19 + 19 + UTF-8 + + + \ No newline at end of file diff --git a/core-java-modules/core-java-records/src/main/java/com/baeldung/equalshashcoderecords/Movie.java b/core-java-modules/core-java-records/src/main/java/com/baeldung/equalshashcoderecords/Movie.java new file mode 100644 index 0000000000..e94638e8b5 --- /dev/null +++ b/core-java-modules/core-java-records/src/main/java/com/baeldung/equalshashcoderecords/Movie.java @@ -0,0 +1,26 @@ +package com.baeldung.equalshashcoderecords; + +import java.util.Objects; + +record Movie(String name, Integer yearOfRelease, String distributor) { + +@Override +public boolean equals(Object other) { + if (this == other) { + return true; + } + if (other == null) { + return false; + } + Movie movie = (Movie) other; + if (movie.name.equals(this.name) && movie.yearOfRelease.equals(this.yearOfRelease)) { + return true; + } + return false; +} + + @Override + public int hashCode() { + return Objects.hash(name, yearOfRelease); + } +} diff --git a/core-java-modules/core-java-records/src/main/java/com/baeldung/equalshashcoderecords/Person.java b/core-java-modules/core-java-records/src/main/java/com/baeldung/equalshashcoderecords/Person.java new file mode 100644 index 0000000000..7bfd8ae741 --- /dev/null +++ b/core-java-modules/core-java-records/src/main/java/com/baeldung/equalshashcoderecords/Person.java @@ -0,0 +1,5 @@ +package com.baeldung.equalshashcoderecords; + +public record Person(String firstName, String lastName, String SSN, String dateOfBirth) { +}; + diff --git a/core-java-modules/core-java-records/src/test/java/com/baeldung/equalshashcoderecords/CustomRecordEqualsHashCode.java b/core-java-modules/core-java-records/src/test/java/com/baeldung/equalshashcoderecords/CustomRecordEqualsHashCode.java new file mode 100644 index 0000000000..074886304f --- /dev/null +++ b/core-java-modules/core-java-records/src/test/java/com/baeldung/equalshashcoderecords/CustomRecordEqualsHashCode.java @@ -0,0 +1,30 @@ +package com.baeldung.equalshashcoderecords; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import org.junit.Test; + +public class CustomRecordEqualsHashCode { + @Test + public void givenTwoRecords_whenDefaultEquals_thenCompareEquality() { + Person robert = new Person("Robert", "Frost", "HDHDB223", "2000-01-02"); + Person mike = new Person("Mike", "Adams", "ABJDJ2883", "2001-01-02"); + assertNotEquals(robert, mike); + } + + @Test + public void givenTwoRecords_hashCodesShouldBeSame() { + Person robert = new Person("Robert", "Frost", "HDHDB223", "2000-01-02"); + Person robertCopy = new Person("Robert", "Frost", "HDHDB223", "2000-01-02"); + assertEquals(robert.hashCode(), robertCopy.hashCode()); + } + + @Test + public void givenTwoRecords_whenCustomImplementation_thenCompareEquality() { + Movie movie1 = new Movie("The Batman", 2022, "WB"); + Movie movie2 = new Movie("The Batman", 2022, "Dreamworks"); + assertEquals(movie1, movie2); + assertEquals(movie1.hashCode(), movie2.hashCode()); + } +} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 6f3aec8c3a..91f0dbfc28 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -141,6 +141,7 @@ core-java-uuid pre-jpms core-java-collections-maps-6 + core-java-records