業務場景:
一個list集合,里面add了若干個實體類,針對該實體類排序的屬性為String。
使用技術,自定義list排序(JDK自帶),重寫Comparator接口的compare方法,漢字轉拼音技術:使用的pinyin4j。
pinyin4j官網地址:http://pinyin4j.sourceforge.net/
不想去官網下載的我這里也有,地址為:
//tempRateList 為需要進行自定義排序的集合,SpRate為該集合的實體類,riskName為排序的屬性。
直接上方案:
1、導入pinyin4j-2.5.0.jar;
2、對自定義排序的類使用以下方法進行自定義排序;
- Collections.sort(tempRateList,new Comparator<SpRate>() {
- @Override
- public int compare(SpRate s1, SpRate s2) {
- String o1 = s1.getRiskName();
- String o2 = s2.getRiskName();
- for (int i = 0; i < o1.length() && i < o2.length(); i++) {
- int codePoint1 = o1.charAt(i);
- int codePoint2 = o2.charAt(i);
- if (Character.isSupplementaryCodePoint(codePoint1)
- || Character.isSupplementaryCodePoint(codePoint2)) {
- i++;
- }
- if (codePoint1 != codePoint2) {
- if (Character.isSupplementaryCodePoint(codePoint1)
- || Character.isSupplementaryCodePoint(codePoint2)) {
- return codePoint1 - codePoint2;
- }
- String pinyin1 = PinyinHelper.toHanyuPinyinStringArray((char) codePoint1) == null
- ? null : PinyinHelper.toHanyuPinyinStringArray((char) codePoint1)[0];
- String pinyin2 = PinyinHelper.toHanyuPinyinStringArray((char) codePoint2) == null
- ? null : PinyinHelper.toHanyuPinyinStringArray((char) codePoint2)[0];
- if (pinyin1 != null && pinyin2 != null) { // 兩個字符都是漢字
- if (!pinyin1.equals(pinyin2)) {
- return pinyin1.compareTo(pinyin2);
- }
- } else {
- return codePoint1 - codePoint2;
- }
- }
- }
- return o1.length() - o2.length();
- }
- });
3、方法結束后 tempRateList 對象就完成了自定義排序
