From cd5836bd791fb8ebc7eab8f322554c591ac966b0 Mon Sep 17 00:00:00 2001 From: Fatemesadat Mirabootalebi Date: Mon, 25 May 2026 08:00:45 -0700 Subject: [PATCH] implement student loader threads --- .idea/.gitignore | 10 +++++++ .idea/compiler.xml | 13 ++++++++ .idea/encodings.xml | 7 +++++ .idea/jarRepositories.xml | 20 +++++++++++++ .idea/misc.xml | 12 ++++++++ .idea/vcs.xml | 6 ++++ src/main/java/dev/Main.java | 28 +++++++++++------- src/main/java/dev/model/Student.java | 11 +++---- src/main/java/dev/service/StudentManager.java | 22 ++++++++++---- src/main/java/dev/thread/StudentLoader.java | 25 ++++++++++++---- src/main/java/dev/utils/FileManager.java | 1 + structure.txt | Bin 0 -> 3304 bytes 12 files changed, 130 insertions(+), 25 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 structure.txt diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..a590144 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..4158879 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..eba6e1f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/dev/Main.java b/src/main/java/dev/Main.java index 19ca657..495ce78 100644 --- a/src/main/java/dev/Main.java +++ b/src/main/java/dev/Main.java @@ -36,29 +36,37 @@ public class Main { // TODO: // Split data into 3 parts + int size = data.size(); + int partSize = (int) Math.ceil(size / 3.0); - List part1 = null; - - List part2 = null; - - List part3 = null; + List part1 = data.subList(0, Math.min(partSize, size)); + List part2 = data.subList(Math.min(partSize, size), Math.min(partSize * 2, size)); + List part3 = data.subList(Math.min(partSize * 2, size), size); // TODO: - StudentLoader t1 = null; - - StudentLoader t2 = null; - - StudentLoader t3 = null; + StudentLoader t1 = new StudentLoader(part1); + StudentLoader t2 = new StudentLoader(part2); + StudentLoader t3 = new StudentLoader(part3); // TODO: // start() + t1.start(); + t2.start(); + t3.start(); // join() + t1.join(); + t2.join(); + t3.join(); // merge results + manager.addStudents(t1.getStudents()); + manager.addStudents(t2.getStudents()); + manager.addStudents(t3.getStudents()); + System.out.println("Students loaded successfully."); } case 2 -> { diff --git a/src/main/java/dev/model/Student.java b/src/main/java/dev/model/Student.java index f0484f4..e84a689 100644 --- a/src/main/java/dev/model/Student.java +++ b/src/main/java/dev/model/Student.java @@ -45,9 +45,7 @@ public class Student { // Return custom hash // Example: - // return id % 97; - - return 0; + return id % 97; } @Override @@ -57,14 +55,17 @@ public class Student { // Step 1: // Check null + if (obj == null || getClass() != obj.getClass()) { + return false; + } // Step 2: // Convert obj to Student + Student other = (Student) obj; // Step 3: // Compare IDs - - return false; + return this.id == other.id; } @Override diff --git a/src/main/java/dev/service/StudentManager.java b/src/main/java/dev/service/StudentManager.java index 403a1c6..9f62f4b 100644 --- a/src/main/java/dev/service/StudentManager.java +++ b/src/main/java/dev/service/StudentManager.java @@ -14,9 +14,9 @@ public class StudentManager { // TODO: // Merge students - - // Hint: - // addAll() + if (newStudents != null){ + this.students.addAll(newStudents); + } } @@ -27,7 +27,11 @@ public class StudentManager { // Loop through students // Compare IDs - + for (Student student : students){ + if (student.getId() == id){ + return student; + } + } return null; } @@ -38,11 +42,19 @@ public class StudentManager { // Find student // Remove student - + for (int i = 0; i < students.size(); i++){ + if (students.get(i).getId() == id){ + students.remove(i); + return true; + } + } return false; } public void printStudents() { + if (students.isEmpty()){ + System.out.println("No students found."); + } for (Student student : students) { diff --git a/src/main/java/dev/thread/StudentLoader.java b/src/main/java/dev/thread/StudentLoader.java index ab47522..b03f2d8 100644 --- a/src/main/java/dev/thread/StudentLoader.java +++ b/src/main/java/dev/thread/StudentLoader.java @@ -26,7 +26,6 @@ public class StudentLoader extends Thread { public void run() { // TODO: - /* Example line: @@ -37,17 +36,33 @@ public class StudentLoader extends Thread { // TODO: // split line + String[] parts = line.split(","); // TODO: // read values + if (parts.length == 4){ + try { + int id = Integer.parseInt(parts[0].trim()); + String name = parts[1].trim(); + String major = parts[2].trim(); + double gpa = Double.parseDouble(parts[3].trim()); - // TODO: - // create Student + // TODO: + // create Student + Student student = new Student(id, name, major, gpa); - // TODO: - // add to students list + // TODO: + // add to students list + students.add(student); + } + catch (NumberFormatException e){ + System.err.println("Skipping invalid line format: " + line); + } + } } + // to check if threads are working + // System.out.println(Thread.currentThread().getName() + " -> " + lines.size()); } diff --git a/src/main/java/dev/utils/FileManager.java b/src/main/java/dev/utils/FileManager.java index da7f6f5..b1ab54a 100644 --- a/src/main/java/dev/utils/FileManager.java +++ b/src/main/java/dev/utils/FileManager.java @@ -21,6 +21,7 @@ public class FileManager { // TODO: // Add line to list + lines.add(line); } diff --git a/structure.txt b/structure.txt new file mode 100644 index 0000000000000000000000000000000000000000..8ce3c1ff1f7fa2ba6eef673654b54a7eb6a5f8b4 GIT binary patch literal 3304 zcmcguO>5gg5S??O|H1cA(Li%(Z*3aWhPZ?{%_$du2**XTjbw=w`rF&Sx7H)p+DL0- z1!IlS%)XgSo-&h64ZTHoH;g?+L2_Q9cC+9!+L+aK8Q7Xg3nJk5Z!1ZrH<{gi1(`vAR}m}H7%ph5Z45QOMO}#Z?Z!6UURHlO{!!%!by|Ny>(qloij?`BGJ3MasQsTA_MN4yp(u z3-O~>lKbNJJt?--)h@2~uB?11WJ&3Vwf%Wqw8AP>%_sL}-7hOBIkoP00vp8+ky z9y^BhWAa$r6a2AXH`75FzEt#*(%1RFK`n{&IytBl3hV(+iae+eid?eq*2b8U$5%jD zl1=+TQFF4r%-*IILRH5+A<`Um3t8jW>nB!*S4Ws2iv{mID>gxDB-Is54*X<=)x|% zU8BQUyCI%pstZ2@`;Ak&fG1AH@d+zJ