Java example of sorting a List of objects by multiple fields using Comparator.thenComparing()
method. This method returns a lexicographic-order Comparator with another specified Comparator. This method gives the same effect as SQL ORDER BY clause.
//first name comparator
Comparator<Employee> compareByFirstName = Comparator.comparing( Employee::getFirstName );
//last name comparator
Comparator<Employee> compareByLastName = Comparator.comparing( Employee::getLastName );
//Compare by first name and then last name (multiple fields)
Comparator<Employee> compareByFullName = compareByFirstName.thenComparing(compareByLastName);
//Use Comparator
Collections.sort(employees, compareByFullName);
Sorting on Multiple Fields – ORDER BY Sort
Example of using thenComparing()
to create Comparator
which is capable of sorting by multiple fields.
private static ArrayList<Employee> getUnsortedEmployeeList() { ArrayList<Employee> list = new ArrayList<>(); list.add( new Employee(2, "Lokesh", "Gupta") ); list.add( new Employee(1, "Alex", "Gussin") ); list.add( new Employee(4, "Brian", "Sux") ); list.add( new Employee(5, "Neon", "Piper") ); list.add( new Employee(3, "David", "Beckham") ); list.add( new Employee(7, "Alex", "Beckham") ); list.add( new Employee(6, "Brian", "Suxena") ); return list; } ArrayList<Employee> employees = getUnsortedEmployeeList(); //Compare by first name and then last name Comparator<Employee> compareByName = Comparator .comparing(Employee::getFirstName) .thenComparing(Employee::getLastName); Collections.sort(employees, compareByName);
Checkout the program output that has the employees sorted first by firstName, and then by lastName in dictionary order.
[E[id=7, firstName=Alex, lastName=Beckham],
E [id=1, firstName=Alex, lastName=Gussin],
E [id=4, firstName=Brian, lastName=Sux],
E [id=6, firstName=Brian, lastName=Suxena],
E [id=3, firstName=David, lastName=Beckham],
E [id=2, firstName=Lokesh, lastName=Gupta],
E [id=5, firstName=Neon, lastName=Piper]]
Drop me your questions in the comments section.
Happy Learning !!