This blog explains about sorting list of custom objects in Java
- Define a Custom Java class, In this example, I want to sort all the EmployeeDTO objects based on salary
- Implement 'Comprable' Interface
- Override 'compareTo' method as shown below
- Perform Collections.sort(List) method as shown below, This will internally invoke compareTo() method and sort based on compareTo() implementation.
       
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
public class EmployeeDTO implements Comparable {
    public EmployeeDTO() {
        super();
    }
    private String firstName;
    private String lastName;
    private int sal;
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setSal(int sal) {
        this.sal = sal;
    }
    public int getSal() {
        return sal;
    }
    /**
     *Override compareTo() method
     * @param employee
     * @return
     */
    public int compareTo(EmployeeDTO employee) {
        // Ascending Order
        return this.sal - employee.getSal();
        // Descending Order
        //return employee.getSal()-this.sal;
    }
 }
        
 
- Test above code as shown below, Here I am randomly generating salary value using 'Random' Generator class.
       
      public static void main(String[] args) {
        EmployeeDTO dto = null;
        // Random Number Generator
        Random randomGenerator = new Random();
        List list = new ArrayList();
        for (int i = 0; i < 5; i++) {
            int sal = randomGenerator.nextInt(100);
            dto = new EmployeeDTO();
            dto.setFirstName("FirstName" + sal);
            dto.setLastName("LastName" + sal);
            dto.setSal(sal);
            list.add(dto);
        }
        System.out.println(" Before Sort : ");
        Iterator it = list.iterator();
        while (it.hasNext()) {
            dto = (EmployeeDTO)it.next();
            System.out.println(" First Name : " + dto.getFirstName());
            System.out.println(" Last Name : " + dto.getLastName());
            System.out.println(" Sal : " + dto.getSal());
        }
        // Perform Sorting
        Collections.sort(list);
        System.out.println(" After Sort : ");
        it = list.iterator();
        while (it.hasNext()) {
            dto = (EmployeeDTO)it.next();
            System.out.println(" First Name : " + dto.getFirstName());
            System.out.println(" Last Name : " + dto.getLastName());
            System.out.println(" Sal : " + dto.getSal());
        }
    }
          
 
- We can achieve same by using 'Comparator' Interface
- Write a custom comparator class as shown below
       
  package com.fm.recruitment.model.util;
import java.util.Comparator;
public class SalComparator implements Comparator {
    public SalComparator(){
        super();
    }
    public int compare(EmployeeDTO emp1, EmployeeDTO emp2) {
        int flag = emp1.getSal() - emp2.getSal();
        return flag;
    }
}
        
 
- Follow below code to sort using above comparator
Collections.sort(list,new SalComparator());
Thanks for sharing this informative blog..
ReplyDeleteRegards..
Java Institutes in Chennai
Nice Article! Mostly I have gathered knowledge from the blogger, because its provides more information over the books & here I can get more experienced skills from the professional, thanks for taking your to discussing this topic.
ReplyDeleteRegards,
sas training in Chennai|sas course in Chennai|sas training institute in Chennai
Wow! It was the best article , actually you have posted something useful than others, because I read many articles related to this basics of programming, but I only get impressed with your post only, keep posting.
ReplyDeleteRegards,
ccna course in Chennai|ccna training in Chennai|ccna training institute in Chennai
Thanks for sharing this informative blog
ReplyDeleteWeb Designing training in noida | SAS Summer Training in Noida