Solve the classic problem of merging k sorted arrays of Student objects using a stable Java algorithm. This complete Java code merges multiple student arrays by grade while preserving stability—without modifying the Student class or calling its constructor outside main. Ideal for computer science students and Java learners looking to master arrays, sorting, and custom object handling in Java.
The
language used is Java /** * * Merging k sorted arrays into a
single sorted array. * Your algorithm must be stable. *
* You are NOT allowed to call the constructor of class Student,
except in <em>main</em>. */ public class
StableMerger { /** *
* No modification to class Student is
allowed. * If you change anything
This
question hasn't been solved yet
The language used is Java
/**
*
* Merging k sorted arrays into a single sorted array.
* Your algorithm must be stable.
*
* You are NOT allowed to call the constructor of class Student, except in
<em>main</em>.
*/
public class StableMerger {
/**
*
* No modification to class Student is allowed.
* If you change anything here, your work will not
be graded.
*
*/
static class Student {
String name;
double grade;
public Student(String n, double
g) {
name =
n; grade = g;
}
public String toString() {
return
"(" + name + ", " + grade + ")";
}
}
/**
* Running time: O( ). (n is the total
number of students.)
*/
public static Student[] merge(Student[][] a) {
return null;
}
public
static void main(String[] args) {
String[][] names =
{{"Gloria Tang", "Andy Lau", "McDull"},
{"Eason
Chan", "Denise Ho", "Jennifer Chan", "Joey
Yung", "Kay Tse", "Jacky Cheung", "Anita Mui"},
{"Winnie",
"Mickey", "Teddy", "Peppa"}};
double[][] grades = {{60, 60,
60}, {40, 60, 70, 80, 90, 95, 100}, {0, 90, 95, 100}};
Student[][] a = new
Student[names.length][];
for (int i = 0; i <
names.length; i++) {
a[i] =
new Student[names[i].length];
for
(int j = 0; j < names[i].length; j++)
a[i][j]=
new Student(names[i][j], grades[i][j]);
}
System.out.println(Arrays.toString(merge(a)));
}
}
Answer
import
java.util.Arrays;
import
java.util.ArrayList;
import java.util.Map;
import java.util.*;
import
java.util.stream.Collectors;
public class
StableMerger {
static class Student {
String name;
double grade;
public Student(String
n, double g) {
name = n; grade = g;
}
public String
toString() {
return "(" +
name + ", " + grade + ")";
}
}
public static Student[]
merge(Student[][] a) {
LinkedHashMap<String,
Double> myMap = new LinkedHashMap<String, Double>();
for (int i = 0; i <
a.length; i++)
for (int j = 0; j <
a[i].length; j++)
myMap.put(a[i][j].name
, a[i][j].grade);
LinkedHashMap<String,
Double> sortedMap = new LinkedHashMap<>();
myMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(x
-> sortedMap.put((String)x.getKey(), (Double)x.getValue()));
Student[] merge = new
Student[sortedMap.size()];
int x = 0;
for (Map.Entry<String,
Double> entry : sortedMap.entrySet()) {
merge[x]
= new Student((String)entry.getKey() ,
Double.valueOf(entry.getValue().toString()) );
x++;
}
return
merge;
}
public static void
main(String[] args) {
String[][] names =
{{"Gloria Tang", "Andy Lau", "McDull"},
{"Eason
Chan", "Denise Ho", "Jennifer Chan", "Joey
Yung", "Kay Tse", "Jacky Cheung", "Anita Mui"},
{"Winnie",
"Mickey", "Teddy", "Peppa"}};
double[][]
grades = {{60, 60, 60}, {40, 60, 70, 80, 90, 95, 100}, {0, 90, 95, 100}};
Student[][]
a = new Student[names.length][];
for
(int i = 0; i < names.length; i++) {
a[i]
= new Student[names[i].length];
for
(int j = 0; j < names[i].length; j++)
a[i][j]=
new Student(names[i][j], grades[i][j]);
}
System.out.println(Arrays.toString(merge(a)));
}//
main
}// class
