我有一个简单的班级-人。
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int GetAge() {
return age;
}
}
我不知道10至20岁的人。 现在,我想使用Collections.sort()方法对列表进行排序,但是我不知道它是如何工作的。
public class Main {
public static void main (String [] args) throws IOException {
List<Person> list = new ArrayList<Person>();
list.add(new Person (11));
list.add(new Person (13));
list.add(new Person (32));
list.add(new Person (10));
Collections.sort(list, new Comparator <Person>() {
@Override
public int compare(Person a1, Person a2) {
return a1.GetAge() > a2.GetAge();
}
});
}
}
答案 0 :(得分:5)
您的比较器是错误的。试试这个:
public int compare(Person a1, Person a2) {
return a1.getAge().compareTo(a2.getAge());
}
或
public int compare(Person a1, Person a2) {
return (a1.getAge() - a2.getAge());
}
考虑比较器的合同。它返回一个整数,而不是布尔值。
答案 1 :(得分:3)
通常,在您的compare()函数的@Override实现中,您将需要返回-1、0或1(通常是int)的值。因此,在这种情况下,您需要这样的东西:
@Override
public int compare(Person a1, Person a2) {
return a1.GetAge().compareTo(a2.GetAge());
}
这将根据年龄对Person a1和Person a2进行排序。根据您想要的顺序(升序还是降序),您可以按照a2.GetAge()。compareTo(a1.GetAge())进行比较。这样也可以。
您还需要考虑两个值相等的情况(即返回0时的情况)。