2013-02-17 72 views
0

所以我創建了一個員工對象和一個驅動程序。該驅動程序包含一個Employees的ArrayList,並且此特定方法返回名稱首先按字母順序排列的Employee。如何正確使用在String中實現的compareTo方法?

讓我們將兩個員工添加到ArrayList'staff'並稱他們爲「a」和「z」。

出於某種原因,當我期望它返回Employee「a」時,它總是返回Employee「z」。我是否正確使用了compareTo方法,還是完全是其他的東西?

public Employee first() 
    { 
     int guy = 0; 


     for (int x = 1 ; x < staff.size() ; x ++) 
     { 
      if (staff.get(x -1) instanceof Employee && staff.get(x - 1).getName().compareTo(staff.get(x).getName()) < 0) 
       guy = x - 1; 
     } 

     return ((Employee) staff.get(guy)); 
    } 
+1

這些文檔說明了它的工作原理是什麼? – 2013-02-17 07:21:06

+0

你還沒有向我們展示compareTo方法的實現 – Bozho 2013-02-17 07:24:19

+0

爲什麼你不在一些自定義比較器上排序列表?爲什麼需要檢查'instanceof'呢? – 2013-02-17 07:25:21

回答

2

無需重新發明輪子。使用自定義比較器並使用Collections排序方法。

public class NameComparator implements Comparator<Employee> { 
    @Override 
    public int compare(Employee o1, Employee o2) { 
     return o1.getName().compareTo(o2.getName()); 
    } 
} 

Collections.sort(yourArrayList, new NameComparator()); 

或者,您可以確保您的Employee類實現Comparable<Employee>,您可以不需要上面的自定義比較做。這假定你只會想要根據名字進行比較。