Java tutorial
import java.util.Arrays; import java.util.Comparator; class Person implements Comparable<Person> { public Person(String firstName, String surname) { this.firstName = firstName; this.surname = surname; } public String getFirstName() { return firstName; } public String getSurname() { return surname; } public String toString() { return firstName + " " + surname; } public int compareTo(Person person) { int result = surname.compareTo(person.surname); return result == 0 ? firstName.compareTo(((Person) person).firstName) : result; } private String firstName; private String surname; } class ComparePersons implements Comparator<Person> { // Method to compare Person objects - order is descending public int compare(Person person1, Person person2) { int result = -person1.getSurname().compareTo(person2.getSurname()); return result == 0 ? -person1.getFirstName().compareTo(person2.getFirstName()) : result; } // Method to compare with another comparator public boolean equals(Object collator) { if (this == collator) { // If argument is the same object return true; // then it must be equal } if (collator == null) { // If argument is null return false; // then it can't be equal } return getClass() == collator.getClass(); // Class must be the same for // equal } } public class MainClass { public static void main(String[] args) { Person[] authors = { new Person("A", "S"), new Person("J", "G"), new Person("T", "C"), new Person("C", "S"), new Person("P", "C"), new Person("B", "B") }; System.out.println("Original order:"); for (Person author : authors) { System.out.println(author); } Arrays.sort(authors, new ComparePersons()); // Sort using comparator System.out.println("\nOrder after sorting using comparator:"); for (Person author : authors) { System.out.println(author); } Arrays.sort(authors); // Sort using Comparable method System.out.println("\nOrder after sorting using Comparable method:"); for (Person author : authors) { System.out.println(author); } } }