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 Serializable
private 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));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142658.html