【问题标题】:How to use Collections.sort () in java? [closed]java中如何使用Collections.sort()? [关闭]
【发布时间】:2018-12-06 18:17:45
【问题描述】:

我有一个简单的类——Person。

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

【问题讨论】:

  • 你不明白什么?
  • 这根本行不通。
  • 它编译了吗? compare 应该返回 int 而不是 boolean 在你的情况下。
  • 不,它不会编译。 a1.GetAge() &gt; a2.GetAge() 返回 boolean。 @MikhailDedyukhin 见 duffymo 的回答。
  • @Snoob 或者你可以:Collections.sort(list, Comparator.comparing(Person::GetAge));

标签: java list sorting collections


【解决方案1】:

您的比较器是错误的。试试这个:

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

想想 Comparator 的合同。它返回一个 int,而不是 boolean。

【讨论】:

  • 使用 Integer.compare(..., ...) 会更清楚
  • 见仁见智。我将专注于了解该方法返回的内容。如果你知道这一点,那么任何一个都是清楚的。
【解决方案2】:

通常在 compare() 函数的 @Override 实现中,您需要返回 -1、0 或 1(通常是 int)的值。所以,在这种情况下,你会想要这样的东西:

@Override
    public int compare(Person a1, Person a2) {
        return a1.GetAge().compareTo(a2.GetAge());
    }

这将根据年龄对人 a1 和人 a2 进行排序。根据您想要的顺序(升序与降序),您可以将比较作为 a2.GetAge().compareTo(a1.GetAge());这也可以正常工作。

您还需要考虑两个值相等的情况(此时您将返回 0)。

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多