Java实现根据拼音首字母的排序

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 Java实现根据拼音首字母的排序,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源: 原文

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

Java实现根据拼音首字母的排序
2.实现过程
2.1 首先引入项目的pinyin4j-2.5.0.jar包。
Java实现根据拼音首字母的排序

这个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));

    }
}

效果如下:
Java实现根据拼音首字母的排序

 Java实现根据拼音首字母的排序

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142658.html

(0)
飞熊的头像飞熊bm
0 0

相关推荐

  • Kotlin 协程的取消(一)取消和超时的用法 Android

    Kotlin 协程的取消(一)取消和超时的用法

    0 0141
    小半的头像 小半
    2023年1月30日
  • Android 中如何使用 Kotlin 协程? Android

    Android 中如何使用 Kotlin 协程?

    0 0104
    seven_的头像 seven_
    2023年2月26日
  • 安装qt5.12.12 Android

    安装qt5.12.12

    0 0406
    飞熊的头像 飞熊
    2023年5月10日
  • Android开发太难了:Java Lambda ≠ Android Lambda Android

    Android开发太难了:Java Lambda ≠ Android Lambda

    0 0113
    小半的头像 小半
    2023年2月20日
  • Android笔记(三)多Activity活动的切换中的简化处理 Android

    Android笔记(三)多Activity活动的切换中的简化处理

    0 0111
    飞熊的头像 飞熊
    2023年12月25日
  • 千峰商城-springboot项目搭建-20-vue实例生命周期 Android

    千峰商城-springboot项目搭建-20-vue实例生命周期

    0 082
    飞熊的头像 飞熊
    2023年3月27日
  • 96.android 简单的更新APP、下载安装APK(四种方式) Android

    96.android 简单的更新APP、下载安装APK(四种方式)

    0 0134
    seven_的头像 seven_
    2023年2月23日
  • 6.android 关于popwindow 的点击外部不好使,popwindow不消失的问题 Android

    6.android 关于popwindow 的点击外部不好使,popwindow不消失的问题

    0 0128
    seven_的头像 seven_
    2023年2月23日
  • Android 官方推荐的架构思路 Android

    Android 官方推荐的架构思路

    0 0120
    小半的头像 小半
    2022年12月5日
  • 【Android native层如何添加线程处理任务】 Android

    【Android native层如何添加线程处理任务】

    0 0144
    飞熊的头像 飞熊
    2023年12月13日
  • Context.getSystemService 获取 Manager 的底层实现 Android

    Context.getSystemService 获取 Manager 的底层实现

    0 0120
    小半的头像 小半
    2022年12月5日
  • 【android开发-04】android中activity的生命周期介绍 Android

    【android开发-04】android中activity的生命周期介绍

    0 0148
    飞熊的头像 飞熊
    2023年12月13日

发表回复

登录后才能评论

站长精选

  • 枚举虽好,但务必记得避坑

    枚举虽好,但务必记得避坑

    2022年12月12日

  • K8s + SpringBoot实现零宕机发布

    K8s + SpringBoot实现零宕机发布

    2023年1月10日

  • Lambda 表达式到底会不会造成内存泄漏?

    Lambda 表达式到底会不会造成内存泄漏?

    2024年1月7日

  • 号称世界上最快的内存数据库,比 Redis 快 25 倍!Star 数量狂飙,杀疯了!

    号称世界上最快的内存数据库,比 Redis 快 25 倍!Star 数量狂飙,杀疯了!

    2023年3月1日

  • 这次被 foreach 坑惨了,再也不敢乱用了....

    这次被 foreach 坑惨了,再也不敢乱用了….

    2023年4月17日

  • 采用 SpringCloud 开发的一款医院信息系统(附源码)

    采用 SpringCloud 开发的一款医院信息系统(附源码)

    2023年12月13日

  • SpringBoot 3.2 新特性,启动速度提升了10倍,赶快试试吧!

    SpringBoot 3.2 新特性,启动速度提升了10倍,赶快试试吧!

    2023年12月9日

  • 为什么阿里巴巴修正了HashMap关于1024个元素扩容的次数?(典藏版)

    为什么阿里巴巴修正了HashMap关于1024个元素扩容的次数?(典藏版)

    2024年3月5日

  • 用好自定义参数解析器,帮你减少10%的代码!(Java小技巧)

    用好自定义参数解析器,帮你减少10%的代码!(Java小技巧)

    2023年11月17日

  • @Transactional(readOnly=true) 真的是提高性能的灵丹妙药吗?

    @Transactional(readOnly=true) 真的是提高性能的灵丹妙药吗?

    2023年11月7日

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!

聚圣源纹绣店起名龙宝宝起名大全名字大全恐怖都市纸箱厂起名字免费公司起名测试福岛核污染水入海爸爸姓唐妈妈姓李怎么起名米线起名字大全集路德宗服装起名宝宝起名注意哪几个方面xftp农机品牌起名根据出生日期起小名龙孩子起名字大全农业生态公司起名风景作文酒店年会主题词宝宝起名字测试科技公司起名大全最新英文安暖叶景淮小说全文免费阅读正版小组起名起名软件排行榜起名软件哪个好给蔬果公司起名叉车公司起名三个字的spss中文版女孩起名称姓袁cctv9纪录片医药公司起名用字大全美漫之超级英雄之父淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化