排序实例

描述

访问者排序规则:部门、成员依次排序;部门、成员各自按名称首字符排序:特殊字符,数字,字母,汉字(转为拼音)排序;字母、汉字按a-z排序;

代码

  //排序
        Collections.sort(accessors, new Comparator() {         
            @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;
    }

你可能感兴趣的:(排序实例)