pom文件需要引入pinyin4j包 工具类代码如下: package com.bw.bwss.common.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.exception.BadHanyuPinyinOutputFormatCombination; import java.text.Collator; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Author mxf * @Description 排序工具类 * @Date 2021/4/26 11:22 **/ public class SortUtils { /** * 将一个装有person对象的 list 根据name 首字母排序 * @param list 排序前的数据源 * @param sortField 排序字段名称 必须为String类型 * @return list排序后的数据 */ public static List listToSortByName(List list, String sortField){ if (list == null || list.size() == 0) { return null; } Map<String, Object> map = new HashMap<>(); String[] names = new String[list.size()]; for (int i = 0; i < list.size(); i++) { //String name = list.get(i).getMenuName(); //String name = list.get(i).getDeclaredField(sortField).toString(); String name = String.valueOf(ClazzUtil.getFieldValueByName(sortField,list.get(i))); String alphabet = name.substring(0, 1); /*判断首字符是否为中文,如果是中文便将首字符拼音的首字母和&符号加在字符串前面*/ if (alphabet.matches("[\\u4e00-\\u9fa5]+")) { name = getAlphabet(name) + "&" + name; names[i] = name; } else { names[i] = name; } //names[i] = name; map.put(name, list.get(i)); } names = sort(names); list.clear(); for (String name : names) { if (map.containsKey(name)) list.add(map.get(name)); } return list; } /** * 调用汉字首字母转化为拼音的根据类,需要在项目中导入pinyin4j.jar包 * @param str * @return */ private static String getAlphabet(String str) { HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 输出拼音全部小写 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 不带声调 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); String pinyin = null; try { pinyin = PinyinHelper.toHanyuPinyinStringArray(str.charAt(0), defaultFormat)[0]; } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } assert pinyin != null; return pinyin.substring(0, 1); } /** * 根据数组里面首字母排序 * @param data * @return */ private static String[] sort(String[] data) { if (data == null || data.length == 0) { return null; } Comparator<Object> comparator = Collator.getInstance(java.util.Locale.CHINA); Arrays.sort(data, comparator); return data; } }
利用pinyin4j依赖jar进行中文中文首字母排序工具类
最新推荐文章于 2023-07-12 14:55:58 发布