与Collections.sort()一起使用的比较器,用于字母数字列表

时间:2014-02-07 17:23:04

标签: java sorting

所以我有一堆字母数字项目列表,如...

"123456"
"alpha"
"tango"
"beta"
...

我希望使用Collections.sort()来排序此列表,但我需要先按顺序排序(1234,AAAA,aaaa,BBBB,bbbb,...),然后是大小写单词。所有元素都是字符串,包括任何明显的数字。 Collections.sort()会处理这种情况,因为它们实际上都是字符串,或者如果不是{I}我将使用什么来完成此操作? 或者是否有其他方法可以更有效地完成此操作,如使用正则表达式?

感谢。

1 个答案:

答案 0 :(得分:5)

您可以使用Collator

List<String> list = Arrays.asList("1234","AAAA","aaaa","BBBB","bbbb");
Collator c = Collator.getInstance(Locale.ENGLISH);
c.setStrength(Collator.CANONICAL_DECOMPOSITION);

Collections.sort(list);
System.out.println("without collator: " + list);
Collections.sort(list, c);
System.out.println("with collator: " + list);

输出:

  

没有整理者:[1234,AAAA,BBBB,aaaa,bbbb]
  与collat​​or:[1234,AAAA,aaaa,BBBB,bbbb]

注意:您可能需要一个不同的整理器来满足您的需求,尽管这个看起来很好。在最糟糕的情况下,您可以创建a RuleBaseCollator with your specific rules