2012-12-21 76 views
0

我想通过它的id对对象列表进行排序。这里是我的代码:Collections.sort不排序我的对象列表

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

什么类型getEmployeeId是否返回?是已经排序开始的列表。 – BevynQ

+0

您是否尝试创建列表的副本,并对副本进行排序并保留原始副本?看起来你在这里做的是对原始列表进行排序。 –

+2

请发布[SSCCE](http://sscce.org/)。 –

回答

0

检查employeeId compareTo方法的结果。

如果它总是返回0,排序会认为所有的元素是相等的。集合确实是一个稳定的排序,所以如果所有的元素都相等,它将保持订单不变。

+0

你好,我刚刚检查了调试。它返回-1。 – Nicole

0
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 
} 

这是正确打印输出: A1B1 A2B1 A3B1

0

您将在排定的顺序,这就是为什么你是你的名单没有得到更新的印象下的列表。就你的来源而言,你没有问题是正确的。这个问题是你的投入。您按以下方式按照排序顺序给出以下输入。

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]