A renderização final que precisa ser alcançada é a seguinte:
1. Ideias de implementação
1. Classifique as coleções da lista de dados, classificadas de acordo com os caracteres chineses.
2. Circule para encontrar 26 letras, use a letra como chave e use os dados com a mesma letra inicial da lista como valor (conjunto).
2. Preparação para o desenvolvimento
1. Aqui você precisa usar o pacote jar pinyin4j-2.5.0.jar, que converte caracteres chineses em pinyin.
Você pode clicar em pinyin4j-2.5.0.jar para baixar o recurso do pacote jar que carreguei no CSDN;
2. Importe o pacote jar para o projeto maven
1) Crie um novo arquivo lib no projeto, copie e cole o pacote jar no arquivo
2) Configuração de dependência no arquivo pom
<dependency>
<groupId>pinyin4j</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
<scope>system</scope>
<systemPath>${project.basedir}\lib\pinyin4j-2.5.0.jar</systemPath>
</dependency>
3. Implementação de código
1. Este é o método de conversão de caracteres chineses em pinyin
/**
* 字符串拼音转换工具类
*/
public class PinyinUtil {
/**
* 获取汉字串拼音,英文字符不变
* @param chinese 汉字串
* @return 汉语拼音
*/
public static String getFullSpell(String chinese) {
StringBuffer pybf = 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 {
pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr[i]);
}
}
return pybf.toString();
}
}
2. Exemplos de uso de código comercial
O que finalmente retorno aqui é o modelo de dados com a classe de entidade como tema, mas a ferramenta de processamento pinyin só pode processar strings, então transformei essa parte e a implementei com expressões lambda.
public List<a> findParkList(String search){
List<a> b = new ArrayList<>();
//查询所有园区
List<d> list = dMapper.findByCommName(search);
//将园区按照首字母进行分组
if (list != null && list.size() > 0) {
Comparator com = Collator.getInstance(Locale.CHINA);
//按字母排序
Collections.sort(list.stream().map(d::getCommunityName).collect(Collectors.toList()),com);
//输出26个字母
for (int i = 1; i <= 26; i++) {
String word = String.valueOf((char)(96 + i)).toUpperCase();
//循环找出首字母一样的数据
List<d> dList = new ArrayList<>();
for (d e : list) {
String zm = PinyinUtil.getFullSpell(e.getCommunityName()).substring(0,1);
if (word.equals(zm)){
dList.add(e);
}
}
if (dList != null && dList.size() > 0) {
a c = new a();
c.setInitials(word);
c.setFrameParkList(dList);
b.add(c);
}
}
}
return b;
}
ou consulte
Como esse código envolve código comercial, parte do código foi modificada.
4. Teste
Chame a interface, a saída do console é a seguinte
{
"content": [
{
"frameParkList": [
{
"communityName": "安大法官的双方各",
"createName": "",
"datasourceId": "",
"id": "220A2878E078rfvcd1EE899A1E3"
}
],
"initials": "A"
},
{
"frameParkList": [
{
"communityName": "白风风光光",
"createName": "",
"datasourceId": "",
"id": "220A2878E0C14F1EE877A1E3"
}
],
"initials": "B"
}
],
"message": "",
"status": "success"
}
#@seu#
帮助到您请点赞关注收藏谢谢!!