title: Comparator Interface implemented in a nested class
body: <p>I'm new on stackoverflow.com but I often used it to search for answers whenever I had a problem, but now I can't find any result searching for my problem so I'm asking here :)
  I'm studying for the OCPJP SE 7 certification, exam 1Z0-804, and I'm using a book (there is only one available afaik, Ganesh\Sharma's one)
  In the collections chapter, about the Comparator interface, the book provide this example of using both the Comparator and the Comparable interface to sort an array of Student elements, but the question is about the Comparator:</p>
  
  <pre><code>import java.util.*;
  
  class Student implements Comparable&lt;Student&gt; {
      private String id, name;
      private Double cgpa;
      public String getName() {
          return name;
      }
      public String getId() {
          return id;
      }
      public Double getCgpa() {
          return cgpa;
      }
      public Student(String studentId, String studentName, double studentCGPA) {
          id=studentId;
          name=studentName;
          cgpa=studentCGPA;
      }
      public String toString() {
          return id+" "+name+" "+cgpa;
      }
      public int compareTo(Student that) {
          return this.id.compareTo(that.id);
      }
  }
  
  class StudentCGPA implements Comparator&lt;Student&gt; {
      public int compare(Student s1, Student s2) {
          return s1.getCgpa().compareTo(s2.getCgpa());
      }
  }
  
  class MyMainClass {
      public static void main(String[] args) {
          Student[] students =    {   new Student("cs011", "Lennon", 3.1),
                                      new Student("cs021", "McCartney", 3.4),
                                      new Student("cs012", "Harrison", 2.7),
                                      new Student("cs022", "Starr", 3.7),
                                  };
          Arrays.sort(students, new StudentCGPA());
          System.out.println(Arrays.toString(students));
      }
  }
  </code></pre>
  
  <p>So it creates a new class only for using the Comparator interface with two Student objects, but I think this is very uncomfortable so I wonder: why can't I use a nested class (within Student)? Like this:</p>
  
  <pre><code>import java.util.*;
  
  class Student implements Comparable&lt;Student&gt; {
      private String id, name;
      private Double cgpa;
      public String getName() {
          return name;
      }
      public String getId() {
          return id;
      }
      public Double getCgpa() {
          return cgpa;
      }
      public Student(String studentId, String studentName, double studentCGPA) {
          id=studentId;
          name=studentName;
          cgpa=studentCGPA;
      }
      public String toString() {
          return id+" "+name+" "+cgpa;
      }
      public int compareTo(Student that) {
          return this.id.compareTo(that.id);
      }
      static class StudentCGPA implements Comparator&lt;Student&gt; {
          public int compare(Student s1, Student s2) {
              return s1.getCgpa().compareTo(s2.getCgpa());
          }
      }
  }
  
  class MyMainClass {
      public static void main(String[] args) {
          Student[] students =    {   new Student("cs011", "Lennon", 3.1),
                                      new Student("cs021", "McCartney", 3.4),
                                      new Student("cs012", "Harrison", 2.7),
                                      new Student("cs022", "Starr", 3.7),
                                  };
          Arrays.sort(students, new Student.StudentCGPA());
          System.out.println(Arrays.toString(students));
      }
  }
  </code></pre>
  
  <p>The book says nothing about using nested classes instead of normal ones, but I can't see why it should be bad to do like this... Is there any problem with my code (the 2nd one)? Should I follow what the book says because my implementation of Comparator is wrong? (Note: the code compiles and runs without problem, with the expected output in both cases)</p>
  
  <pre><code>[cs012 Harrison 2.7, cs011 Lennon 3.1, cs021 McCartney 3.4, cs022 Starr 3.7]
  </code></pre>
  
  <p>Please help :D Thanks in advance.</p>