Mic*_*ael 41 java string alphabetical comparator
我需要按字母顺序对字符串列表进行排序:
List<String> list = new ArrayList();
list.add("development");
list.add("Development");
list.add("aa");
list.add("AA");
list.add("Aa");
Run Code Online (Sandbox Code Playgroud)
一种常见的方法是使用比较器:
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
Run Code Online (Sandbox Code Playgroud)
CaseInsensitiveComparator的问题是"AA"等于"aa".字符串根据相同值的添加顺序出现在结果中,并且不正确:
"aa","AA","Aa","development","Development"
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 68
如果您不想添加对Guava的依赖(根据Michael的回答),那么这个比较器是等价的:
private static Comparator<String> ALPHABETICAL_ORDER = new Comparator<String>() {
public int compare(String str1, String str2) {
int res = String.CASE_INSENSITIVE_ORDER.compare(str1, str2);
if (res == 0) {
res = str1.compareTo(str2);
}
return res;
}
};
Collections.sort(list, ALPHABETICAL_ORDER);
Run Code Online (Sandbox Code Playgroud)
我认为这很容易理解和编码......
该方法的最后4行可以更简洁地写成如下:
return (res != 0) ? res : str1.compareTo(str2);
Run Code Online (Sandbox Code Playgroud)
Mic*_*ael 16
解决问题的简单方法是使用Guava中的ComparisonChain http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ComparisonChain.html
private static Comparator<String> stringAlphabeticalComparator = new Comparator<String>() {
public int compare(String str1, String str2) {
return ComparisonChain.start().
compare(str1,str2, String.CASE_INSENSITIVE_ORDER).
compare(str1,str2).
result();
}
};
Collections.sort(list, stringAlphabeticalComparator);
Run Code Online (Sandbox Code Playgroud)
链中的第一个比较器将根据不区分大小写的顺序对字符串进行排序,第二个比较器将根据不区分大小写的顺序对字符串进行排序.由于例外字符串根据字母顺序出现在结果中:
"AA","Aa","aa","Development","development"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
119541 次 |
最近记录: |