diff --git a/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentClassic.java b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentClassic.java new file mode 100644 index 0000000000..cfaa3e1cd4 --- /dev/null +++ b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentClassic.java @@ -0,0 +1,61 @@ +package org.example; + +import java.util.Objects; + +public class StudentClassic { + private String name; + private int rollNo; + private int marks; + + public StudentClassic(String name, int rollNo, int marks) { + this.name = name; + this.rollNo = rollNo; + this.marks = marks; + } + + public String getName() { + return name; + } + + public int getRollNo() { + return rollNo; + } + + public int getMarks() { + return marks; + } + + public void setName(String name) { + this.name = name; + } + + public void setRollNo(int rollNo) { + this.rollNo = rollNo; + } + + public void setMarks(int marks) { + this.marks = marks; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + StudentClassic that = (StudentClassic) o; + return rollNo == that.rollNo && marks == that.marks && Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name, rollNo, marks); + } + + @Override + public String toString() { + return "StudentClassic{" + + "name='" + name + '\'' + + ", rollNo=" + rollNo + + ", marks=" + marks + + '}'; + } +} diff --git a/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecord.java b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecord.java new file mode 100644 index 0000000000..84633c5c5e --- /dev/null +++ b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecord.java @@ -0,0 +1,19 @@ +package org.example; + +import java.util.Comparator; +import java.util.List; + +public record StudentRecord(String name, int rollNo, int marks) { + public StudentRecord(String name){ + this(name, 0,0); + } + public StudentRecord { + if (marks < 0 || marks > 100) { + throw new IllegalArgumentException("Marks should be between 0 and 100."); + } + if (name == null) { + throw new IllegalArgumentException("Name cannot be null"); + } + } +} + diff --git a/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordV2.java b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordV2.java new file mode 100644 index 0000000000..07b2193fcc --- /dev/null +++ b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordV2.java @@ -0,0 +1,22 @@ +package org.example; + +record StudentRecordV2(String name, int rollNo, int marks, char grade) { + public StudentRecordV2(String name, int rollNo, int marks) { + this(name, rollNo, marks, calculateGrade(marks)); + } + + private static char calculateGrade(int marks) { + if (marks >= 90) { + return 'A'; + } else if (marks >= 80) { + return 'B'; + } else if (marks >= 70) { + return 'C'; + } else if (marks >= 60) { + return 'D'; + } else { + return 'F'; + } + } +} + diff --git a/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordV3.java b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordV3.java new file mode 100644 index 0000000000..b1035d5b10 --- /dev/null +++ b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordV3.java @@ -0,0 +1,11 @@ +package org.example; + +import java.util.UUID; + +record StudentRecordV3(String name, int rollNo, int marks, String id) { + + public StudentRecordV3(String name, int rollNo, int marks) { + this(name, rollNo, marks, UUID.randomUUID().toString()); + } +} + diff --git a/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordJUnitTest.java b/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordJUnitTest.java new file mode 100644 index 0000000000..3d932541ba --- /dev/null +++ b/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/recordsCustomConstructors/StudentRecordJUnitTest.java @@ -0,0 +1,37 @@ +import org.example.StudentRecord; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +public class StudentRecordJUnitTest { + + @Test + public void givenStudentRecordData_whenCreated_thenStudentPropertiesMatch() { + StudentRecord s1 = new StudentRecord("John", 1, 90); + StudentRecord s2 = new StudentRecord("Jane", 2, 80); + assertEquals("John", s1.name()); + assertEquals(1, s1.rollNo()); + assertEquals(90, s1.marks()); + assertEquals("Jane", s2.name()); + assertEquals(2, s2.rollNo()); + assertEquals(80, s2.marks()); + } + @Test + public void givenStudentRecordsList_whenSortingDataWithName_thenStudentsSorted(){ + List studentRecords = List.of( + new StudentRecord("Dana", 1, 85), + new StudentRecord("Jim", 2, 90), + new StudentRecord("Jane", 3, 80) + ); + + List mutableStudentRecords = new ArrayList<>(studentRecords); + mutableStudentRecords.sort(Comparator.comparing(StudentRecord::name)); + + List sortedStudentRecords = List.copyOf(mutableStudentRecords); + assertEquals("Jane", sortedStudentRecords.get(1).name()); + } +}