Writing Your own Comparator : Comparator « Collections Data Structure « Java

Writing Your own Comparator

 Writing Your own Comparator
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class EmpComparator implements Comparator {
  public int compare(Object obj1, Object obj2) {
    Person emp1 = (Person) obj1;
    Person emp2 = (Person) obj2;

    int nameComp = emp1.getFirstName().compareTo(emp2.getFirstName());

    return ((nameComp == 0) ? emp1.getLastName().compareTo(
        emp2.getLastName()) : nameComp);

  public static void main(String args[]) {
    String names[] = { "Bart", "Hugo", "Lisa", "Marge", "Homer", "Maggie",
        "Roy" };

    // Convert to list
    List list = new ArrayList(Arrays.asList(names));

    // Ensure list sorted
    System.out.println("Sorted list: [length: " + list.size() + "]");

    // Search for element in list
    int index = Collections.binarySearch(list, "Maggie");
    System.out.println("Found Maggie @ " + index);

    // Search for element not in list
    index = Collections.binarySearch(list, "Jimbo Jones");
    System.out.println("Didn't find Jimbo Jones @ " + index);

    // Insert
    int newIndex = -index - 1;
    list.add(newIndex, "Jimbo Jones");
    System.out.println("With Jimbo Jones added: [length: " + list.size()
        + "]");

    // Min should be Bart
    // Max should be Roy

    Comparator comp = Collections.reverseOrder();

    // Reversed Min should be Roy
    System.out.println(Collections.min(list, comp));
    // Reversed Max should be Bart
    System.out.println(Collections.max(list, comp));

class Person implements Comparable {
  String firstName, lastName;

  public Person(String f, String l) {
    this.firstName = f;
    this.lastName = l;

  public String getFirstName() {
    return firstName;

  public String getLastName() {
    return lastName;

  public String toString() {
    return "[ name=" + firstName + ",name=" + lastName + "]";

  public int compareTo(Object obj) {
    Person emp = (Person) obj;
    int deptComp = firstName.compareTo(emp.getFirstName());

    return ((deptComp == 0) ? lastName.compareTo(emp.getLastName())
        : deptComp);

  public boolean equals(Object obj) {
    if (!(obj instanceof Person)) {
      return false;
    Person emp = (Person) obj;
    return firstName.equals(emp.getFirstName())
        && lastName.equals(emp.getLastName());



Related examples in the same category

1.Creating a Comparable objectCreating a Comparable object
2.A Class Implementing Comparable
3.Comparator for comparing strings ignoring first character
4.List and Comparators
5.Sort backwards
6.Company and Employee
7.Search with a Comparator
8.Keep upper and lowercase letters togetherKeep upper and lowercase letters together
9.Uses anonymous inner classesUses anonymous inner classes
10.Building the anonymous inner class in-placeBuilding the anonymous inner class in-place
11.Sort an array of strings in reverse order.
12.Sort an array of strings, ignore case difference.
13.Comparator uses a Collator to determine the proper, case-insensitive lexicographical ordering of two strings.
14.Using the Comparable interface to compare and sort objects
15.Sort on many(more than one) fields
16.File Name Comparator
17.Comparator similar to String.CASE_INSENSITIVE_ORDER, but handles only ASCII characters
18.Natural Order Comparator
19.Reverse Order Comparator
20.A Comparator for Boolean objects that can sort either true or false first
21.Invertible Comparator
22.This program animates a sort algorithm