Android 实现中文按拼音排序方法

难点:汉字转为拼音。

https://github.com/promeG/TinyPinyin

Android 实现中文按拼音排序方法_第1张图片

是首先获取的Bean对象:

for (int i = 0; i < dataList.size(); i++) {
//将汉字转化为拼音,并以“,”隔开 如:北京市 -> BEI,JIN,SHI
String s = Pinyin.toPinyin(dataList.get(i).platformName, ",");
String[] strarr = s.split(",");
//取首字母
for (int m = 0; m < strarr.length; m++) {
strarr[m] = strarr[m].substring(0, 1);

}
StringBuffer sb = new StringBuffer();
for (int n = 0; n < strarr.length; n++) {
sb.append(strarr[n]);
}
//s2=BJS
String s2 = sb.toString();
Log.e(TAG, "vgetPlatformListByLetter: s2=" + s2);
//bean的成员变量赋值
dataList.get(i).namePinYin = s2;
}


/**
     * 进行冒泡排序
     *list 根据bean的成员变量namePinYin 排序
     * @param list
     */
    public void transferList(List list) {
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = 0; j < list.size() - 1 - i; j++) {
                exchangeNameOrder(j, list);
            }
        }
    }

    /**
     * 交换两个名字的顺序,根据首字母判断
     *
     * @param j
     * @param list
     */
    public void exchangeNameOrder(int j, List list) {
        String namePinYin1 = list.get(j).namePinYin;
        String namePinYin2 = list.get(j + 1).namePinYin;

        int size = namePinYin1.length() >= namePinYin2.length() ? namePinYin2.length() : namePinYin1.length();
        for (int i = 0; i < size; i++) {
            if (!list.get(j).belongLetter.equals(list.get(j + 1).belongLetter)) {
                break;
            }
            char jc = namePinYin1.charAt(i);
            char jcNext = namePinYin2.charAt(i);
            if (jc < jcNext) {//A在B之前就不用比较了
                break;
            }
            if (jc > jcNext) {//A在B之后就直接交换,让A在前面B在后面
                IndexModel nameBean = list.get(j);
                list.set(j, list.get(j + 1));
                list.set(j + 1, nameBean);
                break;
            }
            //如果AB一样就继续比较后面的字母
        }
    }
//大数向后移动,每趟排序确定这一趟的最大值,就像冒泡一样。
public void sort_maopao(int arr[]){
    for (int i = 0; i < arr.length-1; i++) {
        for (int j = 0; j arr[i+1]) {
                int temp=arr[i+1];
                arr[i+1]=arr[i];
                arr[i+1]=temp;
            }
        }
    }

}

你可能感兴趣的:(Android)