springboot retorna dados classificados agrupados pela primeira letra

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#

帮助到您请点赞关注收藏谢谢!!

Acho que você gosta

Origin blog.csdn.net/qq_18432653/article/details/116783071
Recomendado
Clasificación