Comparator を使用して次のようにコードを作成し、姓に従って並べ替えました。
class Order{
private static ArrayList<String> personlist = new ArrayList<String>();
Iterator iter1 = personlist.iterator();
while (iter1.hasNext()) {
System.out.println(iter1.next());
}
Collections.sort(personlist, new LastnameComparator());
Iterator iter2 = personlist.iterator();
while (iter2.hasNext()) {
System.out.println(iter2.next());
}
}
class String implements Comparable {
String firstName, lastName;
public String(String f, String l) {
this.firstName = f;
this.lastName = l;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String toString() {
return "[ firstname=" + firstName + ",lastname=" + lastName + "]";
}
public int compareTo(Object obj) {
String emp = (String) obj;
int comp = firstName.compareTo(emp.getFirstName());
return ((comp == 0) ? lastName.compareTo(emp.getLastName()) : comp);
}
public boolean equals(Object obj) {
if (!(obj instanceof String)) {
return false;
}
String emp = (String) obj;
return firstName.equals(emp.getFirstName()) && lastName.equals(emp.getLastName());
}
}
class LastnameComparator implements Comparator<String> {
@Override
public int compare(String lastname1, String lastname2) {
int lnameComp = lastname1.getLastName().compareTo(lastname2.getLastName());
return ((lnameComp == 0) ? lastname1.getFirstName().compareTo(lastname2.getFirstName()) :
lnameComp);
}
}
しかし、このコードは正しく機能せず、エラーが発生します。personlist には次の名前が含まれます。
John C. Shafer
Ariel Fuxman
Roberto J. Bayardo Jr.
Alexandre V. Evfimievski
Dmitri Asonov
Kristen LeFevre
そして、次のように表示したい
Dmitri Asonov
Alexandre V. Evfimievski
Ariel Fuxman
Roberto J. Bayardo Jr.
Kristen LeFevre
John C. Shafer
このコードを修正するにはどうすればよいですか?ありがとうございます。