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
"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.