如何在Java中使用Collections.sort()?

时间:2018-06-27 19:03:39

标签: java list sorting collections

我有一个简单的班级-人。

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();
            }
        });
    }
}

2 个答案:

答案 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时的情况)。