// A database of records // // With an ordered iterator that returns records // sorted by lastName, firstName, using a Comparator. import java.util.*; public class Database3 { // One record in the database private class Record implements Comparable { private String lastName; private String firstName; private int ID; private int lastLogin; public Record( String lastName, String firstName, int ID, int lastLogin ) { this.lastName = lastName; this.firstName = firstName; this.ID = ID; this.lastLogin = lastLogin; } public String toString() { return lastName + ", " + firstName + ", " + ID + ", " + lastLogin; } public int compareTo( Object obj ) { Record other = (Record) obj; int rel = lastName.compareTo( other.lastName ); if (rel != 0) return rel; else return firstName.compareTo( other.firstName ); } } // Populate the database with some data private Record [] records = new Record[7]; Database3() { records[0] = new Record( "Stewart", "Duncan", 2203245, 100000 ); records[1] = new Record( "MacKenzie", "Colin", 2211171, 100221 ); records[2] = new Record( "Bellotti", "Myra", 2300017, 100300 ); records[3] = new Record( "Bellotti", "Anne", 2300017, 100300 ); records[4] = new Record( "Chang", "Richard", 2191933, 100354 ); records[5] = new Record( "Erickson", "Thomas", 2203577, 100490 ); records[6] = new Record( "Misfit", "Ima", 2805472, 100532 ); } // ---- NAME COMPARATOR ---- public class nameComparator implements Comparator { public int compare( Object obj1, Object obj2 ) { Record rec1 = (Record) obj1; Record rec2 = (Record) obj2; int rel = rec1.lastName.compareTo( rec2.lastName ); if (rel != 0) return rel; else return rec1.firstName.compareTo( rec2.firstName ); } public boolean equals( Object obj1, Object obj2 ) { Record rec1 = (Record) obj1; Record rec2 = (Record) obj2; if (rec1.lastName.compareTo( rec2.lastName ) == 0) return true; else if (rec1.firstName.compareTo( rec2.firstName ) == 0) return true; else return false; } } Comparator createNameComparator() { return new nameComparator(); } // ---- ORDERED ITERATOR ---- private class DatabaseOrderedIterator implements Iterator { int nextIndex; Record [] sortedRecords; private DatabaseOrderedIterator( Comparator comp ) { nextIndex = 0; sortedRecords = new Record[ records.length ]; for (int i=0; i= sortedRecords.length) throw new NoSuchElementException(); return sortedRecords[ nextIndex++ ]; } public void remove() { throw new UnsupportedOperationException(); } } DatabaseOrderedIterator createOrderedIterator( Comparator comp ) { return new DatabaseOrderedIterator( comp ); } // ---- TESTING CODE ---- public static void main( String [] args ) { Database3 db = new Database3(); DatabaseOrderedIterator iter = db.createOrderedIterator( db.createNameComparator() ); while (iter.hasNext()) System.out.println( iter.next().toString() ); } }