[JAVA]-中文根据拼音首字母排序
有些用户列表/品种列表等,常用A,B,C作为名称的搜索条件。
依赖
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
工具类
public class PinYinUtils {
/**
* 获取汉字对应的拼音
*
* @param chinese 汉字串
* @return
*/
public static String getFullSpell(String chinese) {
StringBuffer bf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
try {
bf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
bf.append(arr[i]);
}
}
return bf.toString();
}
}
将查询的数据,重新进行处理
/**
* 封装根据拼音首字母的数据
*
* @param data
* @return
*/
private List<Map<String, Object>> getPinYinData(List<CpPetKind> data) {
List<Map<String, Object>> list = new LinkedList<>();
for (int i = 1; i <= 26; i++) {
// 大写
String big = String.valueOf((char) (96 + i)).toUpperCase();
// 小写
String little = big.toLowerCase();
List<CpPetKind> initialsList = new LinkedList<>();
for (int j = 0; j < data.size() - 1; j++) {
CpPetKind petKind = data.get(j);
String initials = PinYinUtils.getFullSpell(petKind.getBreed()).substring(0, 1);
if (big.equals(initials) || little.equals(initials)) {
initialsList.add(petKind);
}
}
Map<String, Object> tempMap = new HashMap<>();
tempMap.put("initials", big);
tempMap.put("kinds", initialsList);
list.add(tempMap);
}
return list;
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xiaoxin1218@qq.com
文章标题:[JAVA]-中文根据拼音首字母排序
文章字数:289
本文作者:周信
发布时间:2021-03-22, 17:05:14
最后更新:2023-05-03, 10:25:35
原始链接:http://zx21.xyz/2021/03/22/JAVA-中文根据拼音首字母排序/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。