How to Write Your Own Comparator

From Java Example Source Code

Jump to: navigation, search

Contents

[edit] Overview - How to Write Your Own Comparator

This Java example program shows how to create your own comparator.

[edit] Java Source Code

  • Package: example.comparator
  • File: EmpComparator.java
  1. package example.comparator;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collections;
  6. import java.util.Comparator;
  7. import java.util.List;
  8.  
  9. public class EmpComparator implements Comparator {
  10.     public int compare(Object obj1, Object obj2) {
  11. 	Person emp1 = (Person) obj1;
  12. 	Person emp2 = (Person) obj2;
  13.  
  14. 	int nameComp = emp1.getFirstName().compareTo(emp2.getFirstName());
  15.  
  16. 	return ((nameComp == 0) ? emp1.getLastName().compareTo(emp2.getLastName()) : nameComp);
  17.     }
  18.  
  19.     public static void main(String args[]) {
  20. 	String names[] = { "Bart", "Hugo", "Lisa", "Marge", "Homer", "Maggie", "Roy" };
  21.  
  22. 	// Convert to list
  23. 	List list = new ArrayList(Arrays.asList(names));
  24.  
  25. 	// Ensure list sorted
  26. 	Collections.sort(list);
  27. 	System.out.println("Sorted list: [length: " + list.size() + "]");
  28. 	System.out.println(list);
  29.  
  30. 	// Search for element in list
  31. 	int index = Collections.binarySearch(list, "Maggie");
  32. 	System.out.println("Found Maggie @ " + index);
  33.  
  34. 	// Search for element not in list
  35. 	index = Collections.binarySearch(list, "Jimbo Jones");
  36. 	System.out.println("Didn't find Jimbo Jones @ " + index);
  37.  
  38. 	// Insert
  39. 	int newIndex = -index - 1;
  40. 	list.add(newIndex, "Jimbo Jones");
  41. 	System.out.println("With Jimbo Jones added: [length: " + list.size() + "]");
  42. 	System.out.println(list);
  43.  
  44. 	// Min should be Bart
  45. 	System.out.println(Collections.min(list));
  46. 	// Max should be Roy
  47. 	System.out.println(Collections.max(list));
  48.  
  49. 	Comparator comp = Collections.reverseOrder();
  50.  
  51. 	// Reversed Min should be Roy
  52. 	System.out.println(Collections.min(list, comp));
  53. 	// Reversed Max should be Bart
  54. 	System.out.println(Collections.max(list, comp));
  55.     }
  56. }
  57.  
  58. class Person implements Comparable {
  59.     String firstName, lastName;
  60.  
  61.     public Person(String f, String l) {
  62. 	this.firstName = f;
  63. 	this.lastName = l;
  64.     }
  65.  
  66.     public String getFirstName() {
  67. 	return firstName;
  68.     }
  69.  
  70.     public String getLastName() {
  71. 	return lastName;
  72.     }
  73.  
  74.     public String toString() {
  75. 	return "[ name=" + firstName + ",name=" + lastName + "]";
  76.     }
  77.  
  78.     public int compareTo(Object obj) {
  79. 	Person emp = (Person) obj;
  80. 	int deptComp = firstName.compareTo(emp.getFirstName());
  81.  
  82. 	return ((deptComp == 0) ? lastName.compareTo(emp.getLastName()) : deptComp);
  83.     }
  84.  
  85.     public boolean equals(Object obj) {
  86. 	if (!(obj instanceof Person)) {
  87. 	    return false;
  88. 	}
  89. 	Person emp = (Person) obj;
  90. 	return firstName.equals(emp.getFirstName()) && lastName.equals(emp.getLastName());
  91.     }
  92.  
  93. }

[edit] What Result You Can Get

Run the program, you will get:

Sorted list: [length: 7]
[Bart, Homer, Hugo, Lisa, Maggie, Marge, Roy]
Found Maggie @ 4
Didn't find Jimbo Jones @ -4
With Jimbo Jones added: [length: 8]
[Bart, Homer, Hugo, Jimbo Jones, Lisa, Maggie, Marge, Roy]
Bart
Roy
Roy
Bart

[edit] Required External Libraries and/or Files for this Java Example

Need nothing.


[edit] How to Run this Java Example Program

We recommend running this Java example program with Eclipse.

For assistance in working with Eclipse, please see How to Run Java Program with Eclipse.

It's fairly easy.



[edit] Question & Answer

Any question?

Click edit and post your question or answer here.


import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List;

Personal tools