record Student(String name, int grade, int score) {}

void main() {
    ArrayList<Student> students = new ArrayList<>(List.of(
            new Student("Ada", 9, 88),
            new Student("Grace", 10, 92),
            new Student("Alan", 9, 45),
            new Student("Katherine", 11, 95)));

    Map<Integer, ArrayList<String>> byGrade = new TreeMap<>();
    for (Student student : students) {
        int grade = student.grade();
        if (!byGrade.containsKey(grade)) {
            byGrade.put(grade, new ArrayList<>());
        }
        byGrade.get(grade).add(student.name());
    }

    for (int grade : byGrade.keySet()) {
        IO.println("Grade " + grade + ": " + String.join(", ", byGrade.get(grade)));
    }
}

// From Groundwork, chapter 10 (ch10-records), box 12.
// This example is from Groundwork, licensed CC BY-NC-SA 4.0.
// Run with: java ch10_12.java
