2010-01-27 75 views
4

我需要根據客戶端GWT代碼中的MyDto.name對列表進行排序。目前,我試圖做到這一點...根據字符串對GWT進行排序

Collections.sort(_myDtos, new Comparator<MyDto>() { 

     @Override 
     public int compare(MyDto o1, MyDto o2) { 
     return o1.getName().compareTo(o2.getName()); 
     } 
}); 

不幸的是,排序是不是我所期待的,如大寫什麼是小寫之前。例如ESP在aESP之前。

回答

2

這是因爲大寫字母出現在小寫字母之前。這聽起來像你想不區分大小寫的比較,因此:

Collections.sort(_myDtos, new Comparator<MyDto>() { 

     @Override 
     public int compare(MyDto o1, MyDto o2) { 
     return o1.getName().toLower().compareTo(o2.getName().toLower()); 
     } 
}); 

toLower()是你的朋友。

+1

這將工作,但String.CASE_INSENSITIVE_ORDER似乎最好。 – benstpierre 2010-01-27 17:49:20

+4

我可能會補充說,使用'compareToIgnoreCase'會更好/更容易http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#compareToIgnoreCase(java.lang .String),但結果應該是一樣的。 – 2010-01-28 14:00:35

1

我通常會去爲這一個:

@Override 
public int compare(MyDto o1, MyDto o2) { 
    return o1.getName().compareToIgnoreCase(o2.getName()); 
} 

因爲在我看來,無論字符串操作,否則你做(TOLOWER()或TOUPPER( ))會變得效率較低。這樣,至少你不會創建兩個新的字符串。

相關問題