CHAPTER 4 ■ OPERATORS
Listing 4-32. Book comparator classpackage com.apress.javaforabsolutebeginners .examples.comparing;import java.util.Comparator;public class BookComparator implements Comparator<Person> {public int compare(Person p1, Person p2) {
return p1.favoriteBook.compareTo(p2.favoriteBook);
}
}In this case, all we have to do is use the String class's compareTo method. Note that we must tell the
comparator what kind of thing to compare (with Comparator<Person>). Otherwise, we have to accept
arguments of type Object and cast to objects of type Person.■ Note You don't need comparators for arrays of primitives or for collections of any objects that implement
java.lang.Comparable (such as String and Integer). Those objects are already comparable.Finally, Listing 4-33 shows CompareTest, expanded to use both kinds of comparison.Listing 4-33. CompareTest using both comparisonspackage com.apress.javaforabsolutebeginners .examples.comparing;import java.util.ArrayList;
import java.util.Collections;public class CompareTest {public static void main(String[] args) {
Person samSpade = new Person("Sam", "Spade", "The Maltese Falcon");
Person sherlockHolmes =
new Person("Sherlock", "Holmes", "The Sign of the Four");
Person johnWatson = new Person("John", "Watson", "A Study in Scarlet");
Person drWatson = new Person("John", "Watson", "A Study in Scarlet");
// compare the two that are really equal
System.out.println(johnWatson == drWatson);
System.out.println(johnWatson.equals(drWatson));
System.out.println();
System.out.println("Sorting by name");
// Make a collection from our characters and sort them
ArrayList<Person> characters = new ArrayList<Person>();
characters.add(samSpade);
characters.add(sherlockHolmes);
characters.add(johnWatson);