根据拼音排序

需求:将一组数据按某一字段中文拼音排序

PinyinComparator comparator = new PinyinComparator();  
        Collections.sort(strList, comparator); 

其中strList中放置了数据,可以是任何对象,但要对PinyinComparator中的compare进行对应的修改,我Demo中为String[]

2、PinyinComparator排序类


public class PinyinComparator implements Comparator<Object> {
    /**
     * 比较两个字符串
     */
    public int compare(Object o1, Object o2) {
        String[] name1 = (String[]) o1;
        String[] name2 = (String[]) o2;
        String str1 = getPingYin(name1[0]);
        String str2 = getPingYin(name2[0]);
        int flag = str1.compareTo(str2);
        return flag;
    }

    /**
     * 将字符串中的中文转化为拼音,其他字符不变
     * 
     * @param inputString
     * @return
     */
    public String getPingYin(String inputString) {
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        format.setVCharType(HanyuPinyinVCharType.WITH_V);

        char[] input = inputString.trim().toCharArray();// 把字符串转化成字符数组
        String output = "";

        try {
            for (int i = 0; i < input.length; i++) {
                // \\u4E00是unicode编码,判断是不是中文
                if (java.lang.Character.toString(input[i]).matches(
                        "[\\u4E00-\\u9FA5]+")) {
                    // 将汉语拼音的全拼存到temp数组
                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(
                            input[i], format);
                    // 取拼音的第一个读音
                    output += temp[0];
                }
                // 大写字母转化成小写字母
                else if (input[i] > 'A' && input[i] < 'Z') {
                    output += java.lang.Character.toString(input[i]);
                    output = output.toLowerCase();
                }
                output += java.lang.Character.toString(input[i]);
            }
        } catch (Exception e) {
            Log.e("Exception", e.toString());
        }
        return output;
    }
}

后来根据我们项目的实际情况

    public static class PinyinComparator implements Comparator<Map<?, ?>>{
        private String mSortingKey;

        public PinyinComparator(String sortingKey) {
            mSortingKey = sortingKey;
        }

        public void setSortingKey(String sortingKey) {
            mSortingKey = sortingKey;
        }
        public int compare(Map<?, ?> map1, Map<?, ?> map2){
            Object o1 = map1.get(mSortingKey);
            Object o2 = map2.get(mSortingKey);
            String name1 = (String) o1;
            String name2 = (String) o2;
            String str1 = getPinYin(name1);
            String str2 = getPinYin(name2);
            int flag = str1.compareTo(str2);
            return flag;
        }
    }

在Android.mk文件中这样改

  ...
LOCAL_STATIC_JAVA_LIBRARIES := pinyin4j666 \
                               android-support-v4 android-support-v13 jsr305 \
                               com.mediatek.lbs.em2.utils \
                               com.mediatek.settings.ext
 ...

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := pinyin4j666:libs/pinyin4j-2.5.0.jar
include $(BUILD_MULTI_PREBUILT)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值