Collections.sort()方法未正确选择重载方法

时间:2019-10-17 05:35:20

标签: java generics collections

我的目标是对人员名单进行排序。我正在使用Comparator界面的比较方法。

我创建了三个类。即

Person.java, AgeComparator.java, SortingExample.java

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

然后覆盖比较器界面中的比较方法。

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

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

Person.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 + "]";
    }
}

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

}

SortingExample.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 
方法下显示“红色”行。

错误提示如下,

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

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

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

谢谢

1 个答案:

答案 0 :(得分:2)

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

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

  • 请使用actors.sort(new AgeComparator());Collections.sort太常见了
相关问题