【发布时间】:2014-09-05 18:39:24
【问题描述】:
我正在尝试按名称按字母顺序对 Person 进行反向排序,然后按年龄按升序排序
我可以按姓名倒序排序,但无法再次按年龄升序排序。
PerId Name Age
--------------
7 Simpson 8
3 Michel 10
9 Mark 35
2 Mark 30
8 Lee 40
1 Jorge 19
5 Frank 28
6 Bill 34
4 Bill 16
我的代码
class Util {
public static List<Person> getPersons() {
List<Person> col = new ArrayList<Person>();
col.add(new Person(5, "Frank", 28));
col.add(new Person(1, "Jorge", 19));
col.add(new Person(6, "Bill", 34));
col.add(new Person(3, "Michel", 10));
col.add(new Person(7, "Simpson", 8));
col.add(new Person(4, "Bill",16 ));
col.add(new Person(8, "Lee", 40));
col.add(new Person(9, "Mark", 35));
col.add(new Person(2, "Mark", 30));
return col;
}
}
class Person implements Comparator<Person> {
private int perId;
private String name;
private int age;
public Person(){}
public Person(int perId, String name, int age) {
this.perId = perId;
this.name = name;
this.age = age;
}
//.... getters/setters
@Override
public int compare(Person e1, Person e2) {
return e2.getName().compareTo(e1.getName());
}
}
class PersonId implements Comparable<Person>{
private Integer perId;
@Override
public int compareTo(Person o) {
return this.perId.compareTo(o.getPerId());
}
//...getter
}
public class TestPersonSort {
public static void main(String[] args) {
List<Person> coll = Util.getPersons();
Collections.sort(coll, new Person());
// sort method
printList(coll);
//problem here ***********************************************
//Collections.sort(coll);
}
private static void printList(List<Person> list) {
System.out.println("PerId\tName\tAge");
for (Person e: list) {
System.out.println(e.getPerId() + "\t" + e.getName() + "\t" + e.getAge());
}
}
}
【问题讨论】:
-
创建另一个 Comparator 以按年龄排序,就像您为 name 所做的那样,然后将该 Comparator 传递给 sort 方法。
标签: java sorting collections comparator comparable