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

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!