Java Priority Queue

  • + 0 comments

    My Java 15 solution:

    import java.io.*;
    import java.util.*;
    
    final class Student{
        int id;
        String name;
        double cgpa;
        public Student(int id, String name, double cgpa){
            this.id = id;
            this.name = name;
            this.cgpa = cgpa;
        }
        int getID(){
            return id;
        }
        String getName(){
            return name;
        }
        double getCGPA(){
            return cgpa;
        }
    }
    
    final class PriorityComparator implements Comparator<Student>{
        public int compare(Student o1, Student o2){
            int cgaComparison = Double.compare(o2.getCGPA(), o1.getCGPA());
            if(cgaComparison != 0)return cgaComparison;
            int nameComparison = o1.getName().compareTo(o2.getName());
            if(nameComparison != 0)return nameComparison;
            return Integer.compare(o1.getID(), o2.getID());
        }
    }
    
    final class Priorities{
        List<Student> getStudents(List<String> events){
            Queue<Student> priorityQueue = new PriorityQueue<>(new PriorityComparator());
            for(String e : events){
                String[] splitE = e.split(" ");
                if(splitE[0].equals("ENTER")){
                    Student student = new Student(Integer.valueOf(splitE[3]), splitE[1], Double.valueOf(splitE[2]));
                    priorityQueue.add(student);
                }
                else{
                    priorityQueue.poll();
                } 
            }
            List<Student> students = new ArrayList<Student>();
            while(!priorityQueue.isEmpty()){
                students.add(priorityQueue.poll());
            }
            return students;
        }
    }
    
    public class Solution {
    
        public static void main(String[] args) {
            /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            sc.nextLine();
            List<String> events = new ArrayList<String>();
            for(int i = 0; i < n; i++){
                events.add(sc.nextLine());
            }
            sc.close();
            List<Student> students = new Priorities().getStudents(events);
            if(students.isEmpty())System.out.println("EMPTY");
            else{
                for(Student e : students){
                    System.out.println(e.getName());
                }
            }
        }
    }