package ChineseSort;

import java.util.Collection;
import java.util.Iterator;
import java.util.SortedMap;
import java.util.TreeMap;

public class TestSort {

public static void main(String[] args) {

CollatorComparator comparator = new CollatorComparator();
TreeMap map = new TreeMap(comparator);

for(int i=0; i<10; i++) {
String s = ""+(int)(Math.random()*1000);
map.put(s,s);
}

map.put("abcd","abcd");
map.put("Abc", "Abc");
map.put("bbb","bbb");
map.put("BBBB", "BBBB");

map.put("北京","北京");
map.put("中国","中国");
map.put("上海", "上海");
map.put("厦门", "厦门");
map.put("香港", "香港");
map.put("碑海", "碑海");

Collection col = map.values();
Iterator it = col.iterator();
while(it.hasNext()) {
System.out.println(it.next());

}
}
}

public class CollatorComparator implements Comparator {

Collator collator = Collator.getInstance();

public int compare(Object element1, Object element2) {

CollationKey key1 = collator.getCollationKey(element1.toString().toLowerCase());
CollationKey key2 = collator.getCollationKey(element2.toString().toLowerCase());

return key1.compareTo(key2);
}
}


现在可以看到,排序已经完全符合我们的要求了。如果要反向排序也很容易,遍历的时候倒过来,或者你写两个Comparator的实现类,正向的排序就像我们前面所写的,反向排序就将return key1.compareTo(key2);修改成return -key1.compareTo(key2);,加了个负号,这里你可以直接加个符号看看效果,结果我就不写了,肯定中国是Number One。