1.项目 手机APP端要对企业列表按企业名称首字母(如果企业名是英文的就按)进行分类排序,效果如下:


2.实现过程
2.1 首先引入项目的pinyin4j-2.5.0.jar包。

这个jar的下载地址如下:
链接:https://pan.baidu.com/s/1hkP_gGAYcgzyK_Dyg2ACjw 
提取码:pu7u
在工程根目录下新建libs目录,然后将下载的jar包放到此目录下,然后引入进来(存在目录层级证明引进来了)。

pom文件中要加入一下,否则 在打包时,不能把pinyin4j-2.5.0.jar编入到项目的jar包内。
<dependency><groupId>pinyin4j</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version><scope>system</scope><systemPath>${project.basedir}/libs/pinyin4j-2.5.0.jar</systemPath>
</dependency>
<dependency>
systemPath这个标签的意思时,指定jar的原始路径,这个jar不是引用的本地maven仓库中的。而是从我们项目里的lib目录下引用的。

代码如下:
企业信息实体类:CustCompany

package cn.com.yuanquanyun.client.dto;
import com.fasterxml.jackson.annotation.JsonFormat;import java.util.Date;
import java.util.List;/*** 企业基本信息对象 cust_company* * @author admin* @date 2021-10-29*/
public class CustCompany implements Serializableprivate static final long serialVersionUID = 1L;/** 组织机构名称 */private String companyName;/** 组织结构代码 */private String companyNo;public String getCompanyName() {return companyName;}public void setCompanyName(String companyName) {this.companyName = companyName;}public String getCompanyNo() {return companyNo;}public void setCompanyNo(String companyNo) {this.companyNo = companyNo;}}

工具类:

package cn.com.yuanquanyun.utils;import cn.com.yuanquanyun.client.dto.CustCompany;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
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.*;/*** 中文转拼音工具类*/
@Slf4j
public class PinyinUtils {/*** 获取汉字串拼音,英文字符不变*/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) {log.error("toHanyuPinyinStringArray_error:"+e.getMessage());}} else {pybf.append(arr[i]);}}return pybf.toString();}/*** 将集合数据按照汉字首字母分组排序*/public static List<Map<String, Object>> screenManufacturer(List<CustCompany> list) {try {Collator com = Collator.getInstance(java.util.Locale.CHINA);// 按字母排序//Collections.sort(list, com);// 输出26个字母List<Map<String, Object>> mapList = new ArrayList<>();for (int i = 1; i < 27; i++) {Map<String, Object> map = new TreeMap<>();String word = String.valueOf((char)(96 + i)).toUpperCase();// 循环找出 首字母一样的数据List<CustCompany> letter = new ArrayList<>();for (Iterator<CustCompany>  iter = list.listIterator(); iter.hasNext();) {CustCompany custCompany = iter.next();try{String pybf = getFullSpell(custCompany.getCompanyName());String zm = pybf.substring(0, 1);if (word.equals(zm.toUpperCase())) {letter.add(custCompany);iter.remove();}}catch(Exception ex){log.error(custCompany.getCompanyName()+"调取getFullSpell=="+ex.getMessage());iter.remove();}}map.put("letter",word);map.put("data", letter);mapList.add(map);}return mapList;} catch (Exception e) {e.printStackTrace();}return null;}public static void main(String[] args) {List<CustCompany> list = new ArrayList<>();CustCompany custCompany = new CustCompany();custCompany.setCompanyName("中国电信");custCompany.setCompanyNo("01928373");CustCompany custCompany1 = new CustCompany();custCompany1.setCompanyName("天津卫视");custCompany1.setCompanyNo("01928374");CustCompany custCompany2 = new CustCompany();custCompany2.setCompanyName("天津电信");custCompany2.setCompanyNo("01928375");list.add(custCompany1);list.add(custCompany);list.add(custCompany2);List<Map<String, Object>> maps = screenManufacturer(list);//设置为true时,会以格式化后的形式打印出来,方便查看System.out.println( JSONObject.toJSONString(maps, true));}
}

效果如下:

Java实现根据拼音首字母的排序相关推荐

  1. php 汉字按字母排序,在PHP中,将一个汉字数组按照拼音首字母进行排序

    (之前发的这篇博文因为含有敏感关键字,只好重发一遍了) $str = "我们可以在浏览器中看到,当鼠标移到元素上时,元素开始向右移动,开始比较慢,之后则比较快,移开时按原曲线回到原点.&qu ...

  2. PHP利用ICU扩展intl快速实现汉字转拼音以及按拼音首字母分组排序

    ICU(International Components for Unicode)里提供了transliterator(直译器), 可以很方便把其他语言(比如简体中文)转为拉丁文表示: http:// ...

  3. java汉字的拼音首字母_Java 获取汉字的拼音首字母

    Java 获取汉字的拼音首字母: pom.xml 引用 pinyin4j 包: com.belerweb pinyin4j 2.5.0 PinyinUtil 类: package com.xxx.co ...

  4. java取汉字拼音首字母含多音字及不常见的字

    package com.anxin.ssk.common;import java.io.UnsupportedEncodingException; import java.util.HashMap; ...

  5. php实现通讯录按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序

    应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序.以下方法已经封装好,复制到项目中直接可以使用. 该方法是使用UILocalizedIndexedCollation来进行本 ...

  6. 如何把列表转内容转至拼音首字母归档排序

    当从后台拿到很多无序的数据,但是却要移动端自己按照列表内容首字母归档排序,类似于通讯录,或者省市名称的时候,这个时候,一个一个排序是很不现实的,因为我们无法控制后台传输的数据的具体情况,所以,我们需要 ...

  7. java 获取中文拼音首字母(缩写)

    第一种: 直接上代码(有个别中文无法识别): import java.io.UnsupportedEncodingException; /*** * @author yuki_ho**/ public ...

  8. oracle中fn_getpy函数,SQL Server根据汉字笔划和取得拼音首字母进行排序

    select a.cnword from #t1 a left join #t1 b on a.id=b.id-1 and a.code where b.code is null order by a ...

  9. 通讯录c语言编程按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序

    应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序.以下方法已经封装好,复制到项目中直接可以使用. 该方法是使用UILocalizedIndexedCollation来进行本 ...

最新文章

  1. Hook技术之4 在自己的进程中注入一个Dll到别人的进程
  2. 章节之外:makefile中的函数定义
  3. 关于华为x2中的外置SDCard的使用
  4. 程序员工作生活的好帮手,滴答清单,多平台支持
  5. jquey-整屏滚动的制作过程
  6. CV方向介绍 | 基于自然语言的跨模态行人ReID的SOTA方法简述(下)
  7. 【MySQL】MySQL 查看数据库表列表的3种方式
  8. linux远程仿真,11.5 仿真的远程桌面系统: XRDP 服务器
  9. IDEA集成Git使用教程
  10. 1.数独游戏(生成题目解唯一)
  11. 二叉树入门OJ—递归思想练习
  12. 微信小程序开发教程:WeUI一个专为微信小程序设计的UI框架
  13. 2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜
  14. python动物农场小说网站爬虫_中文编程,用python编写小说网站爬虫
  15. Swin-transformer block整体理解
  16. 【计算机网络】第三部分 数据链路层(17) 广域网SONET/SDH
  17. 2023手把手教你视频剪辑,学会后不用担心不会剪辑了,不用真人露脸!
  18. 真实经历,互联网大厂升职加薪那些事
  19. 网络安全架构部署:Fail Closed,Fail Open,Fail safe,Fail over是什么意思?
  20. nginx服务器代理设置

热门文章

  1. ViLD(Open-Vocabulary Object Detection via Vision and Language Konwledge Distillation)
  2. Docker容器---镜像原理以及创建
  3. 专精特新企业和高新技术企业的区别及认定好处,补贴20-100万
  4. 原生Deta(日期)的各种格式以及其转换方法
  5. 微信小程序---弹性盒子模型
  6. 学习笔记(4):EXCEL VBA编程进阶-2.12 VBA中的数组技术
  7. 通风橱尺寸及通风量(通风橱排风要求)
  8. 只有不断的学习才能收获成长
  9. 十一:以理论结合实践方式梳理前端 React 框架 ———框架架构
  10. python 数据交互_Python用户交互以及数据类型