【发布时间】:2015-02-05 08:49:48
【问题描述】:
我一直在尝试对字符串进行分组,忽略列表中存在的案例,并尝试以区分大小写的方式再次对它们进行排序。
所以,如果我有如下输入:
"Abc","DEF","abc","dEf"
那么我的输出应该被排序两次,因为使用 Comparator 的第一级排序应该是:
"Abc","abc","DEF","dEf"
第二级排序应该是:
"abc","Abc","dEf","DEF"
我的代码如下,它只包含一个比较器。我们可以使用多个比较器来实现这样的排序,或者调整单个比较器来实现这样的逻辑吗?
public class ListSortIgnoreCaseComparator {
/**
* @param args
*/
public static void main(String[] args) {
List<String> input = new ArrayList<>();
input.add("Abc");
input.add("DEF");
input.add("abc");
input.add("dEf");
System.out.println("Input: "+input);
Collections.sort(input, new GroupIgnoreCase());
System.out.println("Output: "+input);
}
}
/**
*
* @author
*
*/
class GroupIgnoreCase implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
}
/**
*
* @author
*
*/
class SortIgnoreCase implements Comparator<String> {
@Override
public int compare(String s3, String s4) {
if(s3.equalsIgnoreCase(s4)){
return s3.compareTo(s4);
}
return 0;
}
}
输出如下:
Input: [Abc, DEF, abc, dEf]
Output: [Abc, abc, DEF, dEf]
我们可以调整比较器,使输出为:
Output: [abc, Abc, dEf, DEF]
而不是上面?
【问题讨论】:
-
你试过用Collator代替吗?
-
@assylias a
Collator确实很强大,但如果没有你想要的,那就自己写吧,呃 -
@fge 我认为你不需要写一个 - 参见下面的答案。
标签: java sorting collections comparator