Collator类详解(Collections.sort 中文排序)

前言:类 Collator

简介

Collator 类执行区分语言环境的 String 比较。使用此类可为自然语言文本构建搜索和排序例程。
Collator 是一个抽象基类。其子类实现具体的整理策略。Java 平台目前提供了 RuleBasedCollator 子类,它适用于很多种语言。还可以创建其他子类,以处理更多的专门需要。
与其他区分语言环境的类一样,可以使用静态工厂方法 getInstance 来为给定的语言环境获得适当的 Collator 对象。如果需要理解特定整理策略的细节或者需要修改策略,只需查看 Collator 的子类即可。

示例

下面直接上代码:
我们实例出一个常见的通讯录列表,其中包含正常的名称,还有一些非正常的英文+数字(这种情况是比较常见的):

public static List<String> init() {
    List<String> list = new ArrayList<String>();
    list.add("李方");
    list.add("郭云2");
    list.add("郭云3");
    list.add("赵飞");
    list.add("马路");
    list.add("xxx");
    list.add("xxy");
    list.add("432");
    return list;
}

之后我们需要实例化 Collator,并获取当前语言环境,通过重写比较器 Comparator来调用 Collections.sort() 方法,代码如下:

public static void sort() {
    List<String> list = init();
    Comparator<String> comparator = new Comparator<String>() {

        public int compare(String o1, String o2) {
            Collator collator = Collator.getInstance();
            return collator.getCollationKey(o1).compareTo(
                collator.getCollationKey(o2));
        }
    };
    Collections.sort(list, comparator);
    System.out.println(list);
    }

输出结果如下:

[432, xxx, xxy, 郭云2, 郭云3, 李方, 马路, 赵飞]

数字排在最前,英文字母其次,汉字则按照拼音进行排序。

你可能感兴趣的:(Core,Java)