/** * Book.java * Jeff Ondich, 17 Feb 2014 */ import java.lang.Comparable; import java.util.Collections; import java.util.ArrayList; import java.util.Comparator; public class Book implements Comparable { public String title; public String author; public Book(String title, String author) { this.title = title; this.author = author; } public String getTitle() { return this.title; } public String getAuthor() { return this.author; } public int compareTo(Book other) { int comparison = this.title.compareTo(other.title); if (comparison != 0) { return comparison; } return this.author.compareTo(other.author); } public static final Comparator titleComparator = new Comparator() { public int compare(Book a, Book b) { return a.title.compareTo(b.title); } }; public static final Comparator authorComparator = new Comparator() { public int compare(Book a, Book b) { return a.author.compareTo(b.author); } }; public static void main(String[] args) { ArrayList bookList = new ArrayList(); bookList.add(new Book("Life on the Mississippi", "Twain")); bookList.add(new Book("Emma", "Austen")); bookList.add(new Book("A Wild Sheep Chase", "Murakami")); bookList.add(new Book("Great Expectations", "Acker")); bookList.add(new Book("Great Expectations", "Dickens")); bookList.add(new Book("To Say Nothing of the Dog", "Willis")); bookList.add(new Book("Tinker, Tailor, Soldier, Spy", "Le Carré")); System.out.println("==== Books by default comparison ===="); Collections.sort(bookList); for (Book book : bookList) { System.out.format("%s, by %s\n", book.getTitle(), book.getAuthor()); } System.out.println(""); System.out.println("==== Books by title ===="); Collections.sort(bookList, Book.titleComparator); for (Book book : bookList) { System.out.format("%s, by %s\n", book.getTitle(), book.getAuthor()); } System.out.println(""); System.out.println("==== Books by author ===="); Collections.sort(bookList, Book.authorComparator); for (Book book : bookList) { System.out.format("%s, by %s\n", book.getTitle(), book.getAuthor()); } System.out.println(""); } }