Creating a Comparable object : Comparable Interface « Collections « Java Tutorial






import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;

class Employee implements Comparable {
  String department, name;

  public Employee(String department, String name) {
    this.department = department;
    this.name = name;
  }

  public String getDepartment() {
    return department;
  }

  public String getName() {
    return name;
  }

  public String toString() {
    return "[dept=" + department + ",name=" + name + "]";
  }

  public int compareTo(Object obj) {
    Employee emp = (Employee) obj;
    int deptComp = department.compareTo(emp.getDepartment());

    return ((deptComp == 0) ? name.compareTo(emp.getName()) : deptComp);
  }

  public boolean equals(Object obj) {
    if (!(obj instanceof Employee)) {
      return false;
    }
    Employee emp = (Employee) obj;
    return department.equals(emp.getDepartment()) && name.equals(emp.getName());
  }

  public int hashCode() {
    return 31 * department.hashCode() + name.hashCode();
  }
}

public class MainClass {
  public static void main(String args[]) {
    Employee emps[] = { 
        new Employee("Finance", "A"), 
        new Employee("Finance", "B"),
        new Employee("Finance", "C"), 
        new Employee("Engineering", "D"),
        new Employee("Engineering", "E"), 
        new Employee("Engineering", "F"),
        new Employee("Sales", "G"), 
        new Employee("Sales", "H"), 
        new Employee("Support", "I"), };
    Set set = new TreeSet(Arrays.asList(emps));
    System.out.println(set);
  }
}
[[dept=Engineering,name=D], [dept=Engineering,name=E], [dept=Engineering,name=F], [dept=Finance,name=A], [dept=Finance,name=B], [dept=Finance,name=C], [dept=Sales,name=G], [dept=Sales,name=H], [dept=Support,name=I]]








9.39.Comparable Interface
9.39.1.Classes Implementing Comparable
9.39.2.Creating a Comparable object
9.39.3.Generic Comparable
9.39.4.Sort on many(more than one) fields