Objects sorting in java

Here I explain how to sort java objects using Comparator and  Comparable interfaces.

We want to sort students by marks.
Rahul: 45,
Sameera: 95,
Amith: 28,
Anju: 60,
Lahiru: 86

Method 1: Comparator 


Now create student class

Student.java

  1. package com.codestore.sorting;  
  2.   
  3. /** 
  4.  * @author Sameera Jayasekara 
  5.  */  
  6. public class Student {  
  7.     String name;  
  8.     int totalMarks;  
  9.   
  10.     public Student(String name, int totalMarks) {  
  11.         this.name = name;  
  12.         this.totalMarks = totalMarks;  
  13.   
  14.     }  
  15.   
  16.     @Override  
  17.     public String toString() {  
  18.         return name + ": " + totalMarks;  
  19.     }  
  20. }  
Create comparator class and override compare method

StudentMarksComparator.java

  1. import java.util.Comparator;  
  2.   
  3. /** 
  4.  * @author Sameera Jayasekara 
  5.  */  
  6. public class StudentMarksComparator implements Comparator<Student> {  
  7.   
  8.     @Override  
  9.     public int compare(Student s1, Student s2) {  
  10.         Student student1 = s1;  
  11.         Student student2 = s2;  
  12.         return student2.totalMarks - student1.totalMarks;  
  13.     }  
  14.   
  15. }  

Main.java

  1. package com.codestore.sorting;  
  2.   
  3. import java.util.*;  
  4.   
  5. /** 
  6.  * @author Sameera Jayasekara 
  7.  */  
  8. public class Main {  
  9.   
  10.     public static void main(String[] args) {  
  11.   
  12.         List<Student> students = new ArrayList<Student>();  
  13.         students.add(new Student("Rahul"45));  
  14.         students.add(new Student("Sameera"95));  
  15.         students.add(new Student("Amith"28));  
  16.         students.add(new Student("Anju"60));  
  17.         students.add(new Student("Lahiru"86));  
  18.   
  19.         System.out.println("Before Sort: " + students);  
  20.   
  21.         StudentMarksComparator smc = new StudentMarksComparator();  
  22.         Collections.sort(students, smc);  
  23.   
  24.         System.out.println("After Sort: " + students);  
  25.   
  26.     }  
  27.   
  28. }  
  29.    
Output:
Before Sort: [Rahul: 45, Sameera: 95, Amith: 28, Anju: 60, Lahiru: 86]
After Sort: [Sameera: 95, Lahiru: 86, Anju: 60, Rahul: 45, Amith: 28]

You can directly add a comparator class as a method parameter without creating a separate class.
  1. package com.codestore.sorting;  
  2.   
  3. import java.util.*;  
  4.   
  5. /** 
  6.  * @author Sameera Jayasekara 
  7.  */  
  8. public class Main {  
  9.   
  10.  public static void main(String[] args) {  
  11.   
  12.   List<Student> students = new ArrayList<Student>();  
  13.   students.add(new Student("Rahul"45));  
  14.   students.add(new Student("Sameera"95));  
  15.   students.add(new Student("Amith"28));  
  16.   students.add(new Student("Anju"60));  
  17.   students.add(new Student("Lahiru"86));  
  18.   
  19.   System.out.println("Before Sort: " + students);  
  20.   
  21.   // StudentMarksComparator smc = new StudentMarksComparator();  
  22.   // Collections.sort(students, smc);  
  23.   
  24.   Collections.sort(students, new Comparator<Student>() {  
  25.   
  26.    @Override  
  27.    public int compare(Student s1, Student s2) {  
  28.     Student student1 = s1;  
  29.     Student student2 = s2;  
  30.     return student2.totalMarks - student1.totalMarks;  
  31.    }  
  32.   
  33.   });  
  34.   
  35.   System.out.println("After Sort: " + students);  
  36.   
  37.  }  
  38.   
  39. }  

Method 2: Comparable


Student.java

  1. package com.codestore.sorting.comparable;  
  2.   
  3. /** 
  4.  * @author Sameera Jayasekara 
  5.  */  
  6. public class Student implements Comparable<Student> {  
  7.   
  8.     String name;  
  9.     int totalMarks;  
  10.   
  11.     public Student(String name, int totalMarks) {  
  12.         this.name = name;  
  13.         this.totalMarks = totalMarks;  
  14.     }  
  15.   
  16.     @Override  
  17.     public int compareTo(Student s) {  
  18.         return this.totalMarks - s.totalMarks;  
  19.     }  
  20.   
  21.     @Override  
  22.     public String toString() {  
  23.         return name + ": " + totalMarks;  
  24.     }  
  25.   
  26. }  
  27.    

Main.java

  1. package com.codestore.sorting.comparable;  
  2.   
  3. import java.util.*;  
  4.   
  5. /** 
  6.  * @author Sameera Jayasekara 
  7.  */  
  8. public class Main {  
  9.   
  10.     public static void main(String[] args) {  
  11.   
  12.         List<Student> students = new ArrayList<Student>();  
  13.         students.add(new Student("Rahul"45));  
  14.         students.add(new Student("Sameera"95));  
  15.         students.add(new Student("Amith"28));  
  16.         students.add(new Student("Anju"60));  
  17.         students.add(new Student("Lahiru"86));  
  18.   
  19.         System.out.println("Before Sort: " + students);  
  20.   
  21.         Collections.sort(students);  
  22.   
  23.         System.out.println("After Sort: " + students);  
  24.   
  25.     }  
  26.   
  27. }  
  28.    
Output:
Before Sort: [Rahul: 45, Sameera: 95, Amith: 28, Anju: 60, Lahiru: 86]
After Sort: [Sameera: 95, Lahiru: 86, Anju: 60, Rahul: 45, Amith: 28]

1 comment: