package com.zhishucaipei.ksb.utils; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; public class PinYinKit { /** * 使用该方法将首字母变成拼音,后续可以按拼音进行排序。 */ public static String getPingYin(String chineseStr) throws BadHanyuPinyinOutputFormatCombination { String zhongWenPinYin = ""; char[] chars = chineseStr.toCharArray(); for (int i = 0; i < chars.length; i++) { String[] pinYin = PinyinHelper.toHanyuPinyinStringArray(chars[i], getDefaultOutputFormat()); if (pinYin != null) zhongWenPinYin += pinYin[0]; else zhongWenPinYin += chars[i]; } return zhongWenPinYin; } private static HanyuPinyinOutputFormat getDefaultOutputFormat() { HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.UPPERCASE); format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON); return format; } }
在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。
package com.zhishucaipei.ksb.utils; import com.zhishucaipei.ksb.bean.LinkManInfoVO; import java.util.Comparator; public class PinyinComparator implements Comparator<LinkManInfoVO> { public int compare(LinkManInfoVO o1, LinkManInfoVO o2) { if (o1.getSortLetters().equals("@") || o2.getSortLetters().equals("#")) return -1; else if (o1.getSortLetters().equals("#") || o2.getSortLetters().equals("@")) return 1; else return o1.getSortLetters().compareTo(o2.getSortLetters()); } }
实际使用的方式:
RequestParams params = new RequestParams(UrlConstants.getLinkManAll); params.addBodyParameter("accessToken", user.getData().getAccessToken()); x.http().post(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { try { JSONObject object = new JSONObject(result); Gson gson = new Gson(); LinkManBean linkManBean = gson.fromJson(object.toString(), LinkManBean.class); LinkManInfoData = linkManBean.getData(); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { // sort by a-z BaseApplication.setLinkManInfoList(LinkManInfoData); try { sortModelList = filledData(LinkManInfoData); } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) { badHanyuPinyinOutputFormatCombination.printStackTrace(); } Collections.sort(sortModelList, comparator); adapter = new SortAdapter(getContext(), sortModelList); sortListView.setAdapter(adapter); } });