Mega Code Archive

 
Categories / Java Tutorial / Collections
 

Writing Your own Comparator

import java.util.Arrays; import java.util.Comparator; 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();   } } class EmpComparator implements Comparator {   public int compare(Object obj1, Object obj2) {     Employee emp1 = (Employee)obj1;     Employee emp2 = (Employee)obj2;     int nameComp = emp1.getName().compareTo(emp2.getName());     return ((nameComp == 0) ?       emp1.getDepartment().compareTo(emp2.getDepartment()) :       nameComp);   } } 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(new EmpComparator());     set.addAll(Arrays.asList(emps));     System.out.println(set);   } } [[dept=Finance,name=A], [dept=Finance,name=B], [dept=Finance,name=C], [dept=Engineering,name=D], [dept=Engineering,name=E], [dept=Engineering,name=F], [dept=Sales,name=G], [dept=Sales,name=H], [dept=Support,name=I]]