描述
访问者排序规则:部门、成员依次排序;部门、成员各自按名称首字符排序:特殊字符,数字,字母,汉字(转为拼音)排序;字母、汉字按a-z排序;
代码
//排序
Collections.sort(accessors, new Comparator<Map>() {
@Override
public int compare(Map o1, Map o2) {
//type值表示部门(1)或成员(0)
int type1 = (int) o1.get("type");
int type2 = (int) o2.get("type");
if (type1 != type2) {
return -type1 + type2;
}
//取出首字符,根据正则表达式分出特殊字符、数字、字母、汉字并排序
String name1 = (String) o1.get("name");
String name2 = (String) o2.get("name");
char c1 = name1.charAt(0);
char c2 = name2.charAt(0);
int t1 = getCharType(c1);
int t2 = getCharType(c2);
if (t1 != t2) {
return t1 - t2;
}
//字符是中文,需要转成拼音
if (t1 == 3) {
c1 = Pinyin4jUtil.getPinYinHeadChar(c1 + "").charAt(0);
c2 = Pinyin4jUtil.getPinYinHeadChar(c2 + "").charAt(0);
}
return c1 - c2;
}
});
return Result.setSuccess(accessors, Constant.HTTPCODE_200, false);
}
//判断字符类型
private int getCharType(char c) {
String cc = c + "";
if (cc.matches("[0-9]?")) {
return 1;
}
if (cc.matches("[a-zA-Z]?")) {
return 2;
}
if (cc.matches("[\\u4e00-\\u9fa5]+")) {
return 3;
}
return 0;
}
//首字符转拼音
public static String getPinYinHeadChar(String str) {
String convert = "";
for (int j = 0; j < str.length(); j++) {
char word = str.charAt(j);
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
if (pinyinArray != null) {
convert += pinyinArray[0].charAt(0);
} else {
convert += word;
}
}
return convert;
}
网友评论