0

オブジェクトのリストを 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());
    }
});
4

3 に答える 3

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]
于 2012-12-21T05:34:07.497 に答える
0

employeeId compareTo メソッドの結果を確認します。

常に 0 を返す場合、並べ替えはすべての要素が等しいと見なします。Collections は安定した並べ替えを行うため、すべての要素が等しい場合、順序は変更されません。

于 2012-12-21T02:26:42.453 に答える
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

于 2012-12-21T04:37:29.567 に答える