集合.Sort不会对对象列表进行排序



我正在尝试按其id对对象列表进行排序。下面是我的代码:

List<Employee> employee = getEmployeeList();
Collections.sort(employee, new Comparator<Employee>(){
    @Override
    public int compare(Employee employee1, Employee employee2) {
        return employee1.getEmployeeId().compareTo(employee2.getEmployeeId());
    }
});

但是排序之后什么都没有发生,它仍然显示原始的员工列表。我做错了什么吗?我到处都找过了,但他们都这么做,而且对他们很有效。以下是一组员工id的硬编码:

public class Employee{
    private String employeeId = "";
    private String employeeName = "";
    private String contactNbr = "";
    //getters and setters
}
List<Employee> empList = new ArrayList<Employee>();
Employee emp1 = new Employee();
emp1.setEmployeeId("A1B1");
empList.add(emp1);
Employee emp2 = new Employee();
emp2.setEmployeeId("A2B1");
empList.add(emp2);
Employee emp3 = new Employee();
emp3.setEmployeeId("A3B1");
empList.add(emp3);
Collections.sort(empList, new Comparator<Employee>(){
    @Override
    public int compare(Employee employee1, Employee employee2) {
        return employee1.getEmployeeId().compareTo(employee2.getEmployeeId());
    }
});

检查employeeId compareTo方法的结果。

如果它总是返回0,则排序将认为所有元素都相等。Collections执行稳定排序,所以如果所有元素相等,它将保持顺序不变。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class MainTest {
    public static void main(String[] arg)
    {
        List<Employee> empList = new ArrayList<Employee>();
        Employee emp1 = new Employee();
        emp1.setEmployeeId("A2B1");
        empList.add(emp1);
        Employee emp2 = new Employee();
        emp2.setEmployeeId("A1B1");
        empList.add(emp2);
        Employee emp3 = new Employee();
        emp3.setEmployeeId("A3B1");
        empList.add(emp3);
        Collections.sort(empList, new Comparator<Employee>(){
            public int compare(Employee employee1, Employee employee2) {
                return employee1.getEmployeeId().compareTo(employee2.getEmployeeId());
            }
        });

        Iterator i = empList.iterator();
        while(i.hasNext()){
            System.out.println(((Employee)i.next()).getEmployeeId());
        }

    }
}
class Employee{
    private String employeeId = "";
    private String employeeName = "";
    private String contactNbr = "";
    public String getContactNbr() {
        return contactNbr;
    }
    public void setContactNbr(String contactNbr) {
        this.contactNbr = contactNbr;
    }
    public String getEmployeeId() {
        return employeeId;
    }
    public void setEmployeeId(String employeeId) {
        this.employeeId = employeeId;
    }
    public String getEmployeeName() {
        return employeeName;
    }
    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }
    //getters and setters
}

打印正确的输出:A1B1A2B1A3B1

您正在按排序顺序添加列表,这就是为什么您认为列表没有得到更新的原因。就你的消息来源而言,你做得对是没有问题的。问题在于你的投入。您将按以下顺序输入以下内容。

emp1.setEmployeeId("A1B1");
empList.add(emp1);
emp1.setEmployeeId("A2B1");
empList.add(emp2);
emp1.setEmployeeId("A3B1");
empList.add(emp3);

输出将如下所示

Before sorting: [A1B1, A2B1, A3B1]
After sorting:  [A1B1, A2B1, A3B1]

尝试如下修改源代码并检查

emp1.setEmployeeId("A3B1");
empList.add(emp3);
emp1.setEmployeeId("A2B1");
empList.add(emp2);
emp1.setEmployeeId("A1B1");
empList.add(emp1);

您将得到如下结果

Before sorting: [A3B1, A2B1, A1B1]
After sorting:  [A1B1, A2B1, A3B1]

最新更新