2010-01-27 72 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( ))会变得效率较低。这样,至少你不会创建两个新的字符串。

相关问题