Java实现根据拼音首字母的排序
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实现根据拼音首字母的排序相关推荐
- php 汉字按字母排序,在PHP中,将一个汉字数组按照拼音首字母进行排序
(之前发的这篇博文因为含有敏感关键字,只好重发一遍了) $str = "我们可以在浏览器中看到,当鼠标移到元素上时,元素开始向右移动,开始比较慢,之后则比较快,移开时按原曲线回到原点.&qu ...
- PHP利用ICU扩展intl快速实现汉字转拼音以及按拼音首字母分组排序
ICU(International Components for Unicode)里提供了transliterator(直译器), 可以很方便把其他语言(比如简体中文)转为拉丁文表示: http:// ...
- java汉字的拼音首字母_Java 获取汉字的拼音首字母
Java 获取汉字的拼音首字母: pom.xml 引用 pinyin4j 包: com.belerweb pinyin4j 2.5.0 PinyinUtil 类: package com.xxx.co ...
- java取汉字拼音首字母含多音字及不常见的字
package com.anxin.ssk.common;import java.io.UnsupportedEncodingException; import java.util.HashMap; ...
- php实现通讯录按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序
应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序.以下方法已经封装好,复制到项目中直接可以使用. 该方法是使用UILocalizedIndexedCollation来进行本 ...
- 如何把列表转内容转至拼音首字母归档排序
当从后台拿到很多无序的数据,但是却要移动端自己按照列表内容首字母归档排序,类似于通讯录,或者省市名称的时候,这个时候,一个一个排序是很不现实的,因为我们无法控制后台传输的数据的具体情况,所以,我们需要 ...
- java 获取中文拼音首字母(缩写)
第一种: 直接上代码(有个别中文无法识别): import java.io.UnsupportedEncodingException; /*** * @author yuki_ho**/ public ...
- 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 ...
- 通讯录c语言编程按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序
应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序.以下方法已经封装好,复制到项目中直接可以使用. 该方法是使用UILocalizedIndexedCollation来进行本 ...
最新文章
- Hook技术之4 在自己的进程中注入一个Dll到别人的进程
- 章节之外:makefile中的函数定义
- 关于华为x2中的外置SDCard的使用
- 程序员工作生活的好帮手,滴答清单,多平台支持
- jquey-整屏滚动的制作过程
- CV方向介绍 | 基于自然语言的跨模态行人ReID的SOTA方法简述(下)
- 【MySQL】MySQL 查看数据库表列表的3种方式
- linux远程仿真,11.5 仿真的远程桌面系统: XRDP 服务器
- IDEA集成Git使用教程
- 1.数独游戏(生成题目解唯一)
- 二叉树入门OJ—递归思想练习
- 微信小程序开发教程:WeUI一个专为微信小程序设计的UI框架
- 2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜
- python动物农场小说网站爬虫_中文编程,用python编写小说网站爬虫
- Swin-transformer block整体理解
- 【计算机网络】第三部分 数据链路层(17) 广域网SONET/SDH
- 2023手把手教你视频剪辑,学会后不用担心不会剪辑了,不用真人露脸!
- 真实经历,互联网大厂升职加薪那些事
- 网络安全架构部署:Fail Closed,Fail Open,Fail safe,Fail over是什么意思?
- nginx服务器代理设置
热门文章
- ViLD(Open-Vocabulary Object Detection via Vision and Language Konwledge Distillation)
- Docker容器---镜像原理以及创建
- 专精特新企业和高新技术企业的区别及认定好处,补贴20-100万
- 原生Deta(日期)的各种格式以及其转换方法
- 微信小程序---弹性盒子模型
- 学习笔记(4):EXCEL VBA编程进阶-2.12 VBA中的数组技术
- 通风橱尺寸及通风量(通风橱排风要求)
- 只有不断的学习才能收获成长
- 十一:以理论结合实践方式梳理前端 React 框架 ———框架架构
- python 数据交互_Python用户交互以及数据类型