When we need alternate orderings, we can use a custom Comparator to compare objects.

Usage

  • Collections.sort(list, comparator)
  • list.sort(comparator)
  • Arrays.sort(array, comparator)

Implementations

Anonymous Classes

List<Employee> employees = getEmployees();
 
Collections.sort(employees, new Comparator<Employee>() {
    @Override
    public int compare(Employee e1, Employee e2) {
        return e1.getName().compareTo(e2.getName());
    }
});

Lambda

employees.sort((e1, e2) -> e1.getName().compareTo(e2.getName()));

Comparator static Methods

// Sort by name
employees.sort(Comparator.comparing(Employee::getName)); 
 
// Sort by salary in descending order
employees.sort(Comparator.comparingDouble(Employee::getSalary).reversed()); 
 
// Complex sorting: by department, then salary descending 
employees.sort(Comparator.comparing(Employee::getDepartment) .thenComparingDouble(Employee::getSalary).reversed());