难点:汉字转为拼音。
https://github.com/promeG/TinyPinyin
是首先获取的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<IndexModel> 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<IndexModel> 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.length-1-i ; j++) { if (arr[i]>arr[i+1]) { int temp=arr[i+1]; arr[i+1]=arr[i]; arr[i+1]=temp; } } } }