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。我还真没找到TreeMap里直接反向的方法,谁看到了告诉我。
最后一些要说明的,这里我就不再写实现的代码了,就是我们要实现的是根据model中的一个列进行排序,而我们测试代码只是简单的一些值,这个容易,遍历
所有model,把要排序的列值取出来作为TreeMap的key,然后model放进去作为value就行了,这个很简单,如果想写成稍微通用点的,就
使用反射机制,把取值方法封装一下就行了,然后把model对象和方法名扔进去就行了。至于value值重复的问题,也好办,只要value相同只要不是
多列同时作为排序的键,那么他们之间的前后顺序无所谓,判断一下当前Map中是否含有该key值,存在,则新的key做成value+longtime就
行了,就是加个时间戳(感觉用时间戳比较方便,其它的能区分的办法也行啦)。至于多列的排序,其实也容易,按照列的前后顺序
firstvalue+secondvalue+......组成key放到TreeMap里照样OK
相关推荐
java集合某个字段按照中文拼音排序 java集合某个字段按照中文拼音排序
Java集合排序及java集合类详解,对list,set,map等java集合进行详细讲解
java 集合分组排序帮助类有好的意见可以互相交流不甚感激
Java 集合排序及java 集合类详解 Java 集合排序及java 集合类详解,Java里面最重要、最常用也就是集合那部分了,能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。本教程详细解释了关于Java中的集合是...
Java 集合排序 及java集合类 详解.pdf
java 对象集合按字段排序
java中集合排序
java泛型集合 java集合 集合 java Collection 排序 集合排序
Java集合排序及java集合类详解(Collection、List、Map、Set).doc
4. * 汉字按照拼音排序的比较器 5. * @author KennyLee 2009-2-23 10:08:59 6. * 7. */ 8.public class PinyinComparator implements Comparator<Object> { 9. public int compare(Object o1, Object o2) { 10...
1.插入排序(直接插入排序、折半插入排序、希尔排序); 2.交换排序(冒泡泡排序、快速排序); 3.选择排序(直接选择排序、堆排序); 4.归并排序; 5.基数排序
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
java 集合排序及java集合类详解,本文详细解释了关于java中的集合实现,以及他们的实现原理
Java集合排序及java集合类详解