首页 > 解决方案 > Collections.sort() 方法没有正确选择重载方法

问题描述

我的目标是对人员列表进行排序。我正在使用 Comparator 接口的比较方法。

我创建了三个类。即

Person.java、AgeComparator.java、SortingExample.java
.

Person 类是一个简单的类,它有两个字段(姓名、年龄),也有 getter。然后在我的 AgeComaparator 类中,我实现了 Comparator 接口并将 Person 类作为 Type 参数传递。

然后覆盖来自 Comparator 接口的 compare 方法。

所以要执行这个应用程序,在我的 SortingExample 中,我创建了 3 个 Person 类型的对象。然后将这些对象添加到 Person 类型的 ArrayList 中。

然后调用带有两个参数的 Collections.sort() 方法。这些是列表对象和实现 Comparator 接口的类。

人.java

package com.nadee.module3;

import java.util.Objects;

public class Person {

    private final String name;
    private final int age;

    public Person(String name, int age) {
        Objects.requireNonNull(name);
        this.name = name;
        this.age = age;
    }


    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }


    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }


    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }


    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

年龄比较器.java

package com.nadee.module3;

import java.util.Comparator;

public class AgeComparator implements Comparator<Person>{

    @Override
    public int compare(Person left, Person right) {
        return Integer.compare(left.getAge(), right.getAge());
    }

}

排序示例.java

package com.nadee.module3;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.nadee.collections.Person;

public class SortingExample {
    public static void main(String[] args) {


    Person p1 = new Person("will smith", 45);
    Person p2 = new Person("john snow", 33);
    Person p3 = new Person("johny depth", 55);

    List<Person> actors = new ArrayList<Person>();

    actors.add(p1);
    actors.add(p2);
    actors.add(p3);

    System.out.println(actors);

    Collections.sort(actors, new AgeComparator());

    System.out.println(actors);

    }
}

我正在为此应用程序使用 Eclipse IDE,并且在

种类
方法。

错误说如下,

“集合类型中的方法 sort(List, Comparator) 不适用于参数 (List, AgeComparator)”

我已关注以下文章 https://www.journaldev.com/16094/java-collections-sort

我在这里做错了什么?任何帮助将非常感激。

谢谢

标签: javagenericscollections

解决方案


Person类位于com.nadee.module3中, AgeComparator类用于此类 Person

但在SortingExample类中,您使用的是来自com.nadee.collections .Person 的 Person。它应该完全不起作用。您的代码的另一点:

  • 请用actors.sort(new AgeComparator());Collections.sort太普通了

推荐阅读