【问题标题】:Array sort not working, no instance(s) of variable(s) T exist so that Employee conforms to Comparable数组排序不起作用,不存在变量 T 的实例,因此 Employee 符合 Comparable
【发布时间】:2020-01-09 07:27:21
【问题描述】:

我创建了这个程序。我试图让它对我的列表进行排序,但它不会排序。我已经包含了主程序以及我的 Employee 类。

当我尝试对其进行排序时,它会吐出这个:

Collections 中的sort(java.util.list) 不能应用于(java.util.ArrayList)

这是给我的错误代码:不存在变量 T 的实例,因此 Employee 符合 Comparable<? super T>

import java.util.*;
import java.lang.*;

public class Employee {
    String name;

    public Employee(String name) {
        this.name = name;
    }

    // Used to print student details in main()

    public String toString() {
        return this.name;
    }
}


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

        ArrayList<Employee> listOfEmployees = new ArrayList<Employee>();

        listOfEmployees.add(new Employee("Lauren"));
        listOfEmployees.add(new Employee("Greg"));
        listOfEmployees.add(new Employee("Brenda"));
        listOfEmployees.add(new Employee("Derek"));
        listOfEmployees.add(new Employee("Brittany"));

        System.out.println("Unsorted");


        for (int i=0; i<listOfEmployees.size(); i++) {

            System.out.println(listOfEmployees.get(i));
        }

        Collections.sort(listOfEmployees);

        System.out.println("Sorted Alphabetically");

        for (int i=0; i<listOfEmployees.size(); i++) {
            System.out.println(listOfEmployees.get(i));
        }
    }

}

【问题讨论】:

  • 你必须告诉Employee的两个实例之间应该如何进行比较(也许这可以帮助你Java Comparable
  • 感谢您的帮助!

标签: java arrays list


【解决方案1】:

您需要实现Comparable 接口并覆盖其compareTo 方法,如下所示:

public class Employee implements Comparable<Employee> {
    String name;

    public Employee(String name) {
        this.name = name;
    }

    public String toString() {
        return this.name;
    }

    @Override
    public int compareTo(Employee employee) {
        return this.name.compareTo(employee.name);
    }
}

如果您不想实现Comparable 接口,那么您必须创建一个自定义Comparator,如下所示:

Comparator<Employee> employeeNameComarator = new Comparator<Employee>() {
    @Override
    public int compare(Employee employee1, Employee employee2) {
        return employee1.name.compareTo(employee2.name);
    }
};

并且在排序时传递比较器对象:

Collections.sort(listOfEmployees, employeeNameComarator);

【讨论】:

  • 如果您想在运行时使用任何其他属性进行排序,您可以考虑改用Comparator
【解决方案2】:

您也可以使用Comparator

listOfEmployees.sort(Comparator.comparing(Employee::getName));

【讨论】:

    【解决方案3】:

    您需要实现 Comparable 接口才能使用 Collections.sort()。 请通过以下 oracle 文档了解更多信息:

    https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-16
      • 2017-04-22
      • 2018-07-31
      • 2020-07-13
      • 1970-01-01
      • 2022-10-18
      • 2022-09-23
      • 2017-12-04
      相关资源
      最近更新 更多