package com.yputil.util;
import java.text.CollationKey;
import java.text.Collator;import java.util.Arrays;import java.util.Collection;import java.util.Collections;import java.util.Comparator;import java.util.Iterator;import java.util.List;import java.util.Map;/**
* 按中文排序 * * @author Administrator 时间:2017.8.22 PM */public class ChineseSortUtil implements Comparator<Object> {public ChineseSortUtil() {
} public static boolean sortType = true;private Collator coll = Collator.getInstance();// 查看中文api详解
@Override
public int compare(Object arg0, Object arg1) {// 要想不区分大小写进行比较用o1.toString().toLowerCase()
CollationKey key1 = coll.getCollationKey(arg0.toString()); CollationKey key2 = coll.getCollationKey(arg1.toString());// 降序加个"-"
if(sortType) //升序 return key1.compareTo(key2); else return -key1.compareTo(key2); //降序 }/**
* 排序 1.Map 2.简单数组 3.List * * 根据中文字符排序 * sortType : true--升序 false--降序 * obj : 排序的对象 * 目前对Map没作用 */ public static Object sortByChinese(Object obj,boolean sortType) { ChineseSortUtil.sortType = sortType; // Object objRet = null; if (obj instanceof Map) { // map mapSort((Map) obj); } else if (obj instanceof List) { // List listSort((List) obj); } else if (obj instanceof String[]) { // String[] 数组 stringsSort((String[]) obj); } return obj; }/**
* strs 数组 * * @param strs */ private static void stringsSort(String[] strs) { Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA); Arrays.sort(strs, com); }/**
* 说明:因为ArrayList实现的是RandomAccess 随机访问接口。使用get()要比迭代的效率高。 * 如果实现的是SequenceAccess(顺序访问接口。如:LinkList),使用迭代的效率高 * * @param list */ private static void listSort(List list) { ChineseSortUtil comparator = new ChineseSortUtil(); Collections.sort(list, comparator); }private static void mapSort(Map map) {
// 按照键值排序 ChineseSortUtil comparator = new ChineseSortUtil(); // 注意:每次对TreeMap进行put()时,TreeMap都会自动调用它的compare(key,Entry.key) // 按照key进行排序 Collection col = map.keySet(); Iterator it = col.iterator(); /* * while (it.hasNext()) { System.out.println(it.next()); } */}
}