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