2013-08-07 76 views
0

使用下面的一段代碼。但它是以對象形式給出響應而不是String。讓我知道我錯了......比較器 - 沒有得到預期的結果

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

class Employee5 { 

    String name; 

    public String getName() { 
     // TODO Auto-generated method stub 
     return name.toString(); 
    } 

    void setName(String nameOfEmp) { 
     name = nameOfEmp; 
    } 

} 

class EmpSortByName implements Comparator<Employee5> { 
    public int compare(Employee5 o1, Employee5 o2) { 
     return o1.getName().compareTo(o2.getName()); 
    } 
} 

public class ComparatorExampleInJava { 
    @SuppressWarnings("unchecked") 
    public static void main(String[] args) { 
     Employee5 emp1 = new Employee5(); 
     emp1.setName("A"); 
     Employee5 emp2 = new Employee5(); 
     emp2.setName("C"); 
     Employee5 emp3 = new Employee5(); 
     emp3.setName("B"); 

     List lst = new ArrayList(); 
     lst.add(emp1); 
     lst.add(emp2); 
     lst.add(emp3); 

     System.out.println("Before Sort : " + lst); 

     try { 
      Collections.sort(lst, new EmpSortByName()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     System.out.println("After Sort : " + lst); 

    } 
} 

獲得輸出: 之前排序:[Employee5 @ 19821f,Employee5 @ addbf1,Employee5 @ 42e816] 後排序:[Employee5 @ 19821f,Employee5 @ 42e816,Employee5 @ addbf1]

所需的輸出: 排序前:A,C,B] 排序後:A,B,C]

回答

0

看來,你應該有自己的toString()implementtaion以指定如何:

例如(添加到Employee5)

public String toString() { 
    return name; 
} 

,併爲進一步閱讀打印出來:你的列表

class Employee5 { 
    ... 

    @Override 
    public String toString() { 
     return name; 
    } 

} 
0

當您在打印列表,toString()方法被調用它通過調用toString打印內容()會見被包含的對象的點數。您需要在您的Employee5類中重寫toString()方法並從中返回名稱。

0
Iterator itr = lst.iterator(); 
    while(itr.hasNext()) { 
    Employee5 element = (Employee5) itr.next(); 
    System.out.print(element.getName()); 
    } 

希望這會有所幫助。

相關問題