Search code examples
javapriority-queue

Comparator Declaration Syntax


I am implementing a priority queue and comparator interface in Java using the following code and using Java 8 as advised below:


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.PriorityQueue;

class Student {
    private int token;
    private String name;
    private double cgpa;

    public Student(int id, String name, double cgpa) {
        super();
        this.token = id;
        this.name = name;
        this.cgpa = cgpa;}

    public int getToken() {
        return token;}

    public String getName() {
        return name;}

    public double getCgpa() {
        return cgpa;}
}

class Priorities {
    public List < Student > getStudents(List <String> events) {
        PriorityQueue < Student > student_queue = new PriorityQueue(Comparator.comparing(Student::getCgpa).reversed().thenComparing(Student::getName).thenComparing(Student::getToken));
        List <Student> students = new ArrayList <Student> ();
        for (String e: events) {
            Scanner in =new Scanner(e);
            String event = in.next();
            if (event.equals("ENTER")) {
                String name = in.next();
                float cgpa = in.nextFloat();
                int token = in.nextInt();

                Student student = new Student(token, name, cgpa);
                student_queue.add(student);
            } else if (event.equals("SERVED")) {
                Student first = student_queue.poll();
            } in .close();
        }
        Student first = student_queue.poll();
        if (first == null) {
            return students;
        } else {
            while (first != null) {

                students.add(first);
                first = student_queue.poll();

            }
            return students;
        }

    }
}



public class Solution {
    private final static Scanner scan = new Scanner(System.in);
    private final static Priorities priorities = new Priorities();

    public static void main(String[] args) {
        int totalEvents = Integer.parseInt(scan.nextLine());    
        List<String> events = new ArrayList<>();

        while (totalEvents-- != 0) {
            String event = scan.nextLine();
            events.add(event);
        }

        List<Student> students = priorities.getStudents(events);

        if (students.isEmpty()) {
            System.out.println("EMPTY");
        } else {
            for (Student st: students) {
                System.out.println(st.getName());
            }
        }
    }
}

I am getting the following errors but have been unable to resolve the problem.

Solution.java:30: error: cannot find symbol PriorityQueue < Student > student_queue = new PriorityQueue(Comparator.comparing(Student::getCgpa).reversed().thenComparing(Student::getName).thenComparing(Student::getToken)); ^ symbol: variable Comparator location: class Priorities Solution.java:30: error: invalid method reference PriorityQueue < Student > student_queue = new PriorityQueue(Comparator.comparing(Student::getCgpa).reversed().thenComparing(Student::getName).thenComparing(Student::getToken)); ^ non-static method getCgpa() cannot be referenced from a static context Solution.java:30: error: invalid method reference PriorityQueue < Student > student_queue = new PriorityQueue(Comparator.comparing(Student::getCgpa).reversed().thenComparing(Student::getName).thenComparing(Student::getToken)); ^ non-static method getName() cannot be referenced from a static context Solution.java:30: error: invalid method reference PriorityQueue < Student > student_queue = new PriorityQueue(Comparator.comparing(Student::getCgpa).reversed().thenComparing(Student::getName).thenComparing(Student::getToken)); ^ non-static method getToken() cannot be referenced from a static context Note: Solution.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 4 errors


Solution

  • "Java" on Hackerrank means Java 7.

    You need to choose "Java 8" to get support for the Student::getCpa syntax.

    https://www.hackerrank.com/environment/languages

    Also note that the current (long-term-supported) Java version is Java 11. So be careful when using newer constructs or API that may not be available on Java 8 either.