姓名,地址按照A,B,C…来排序 java代码:

导入依赖: 查询首字母的读音

        <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>

获取首字母工具类,对于多音字只取第一个读音

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*** 获取首字母工具** @author* @Date*/
public class ChineseCharacterUtil {/*** 获取汉字首字母或全拼大写字母** @param chinese 汉字* @param isFull  是否全拼 true:表示全拼 false表示:首字母* @return 全拼或者首字母大写字符窜*/public static String getUpperCase(String chinese, boolean isFull) {return convertHanzi2Pinyin(chinese, isFull).toUpperCase();}/*** 获取汉字首字母或全拼小写字母** @param chinese 汉字* @param isFull  是否全拼 true:表示全拼 false表示:首字母* @return 全拼或者首字母小写字符窜*/public static String getLowerCase(String chinese, boolean isFull) {return convertHanzi2Pinyin(chinese, isFull).toLowerCase();}/*** 将汉字转成拼音* <p>* 取首字母或全拼** @param hanzi  汉字字符串* @param isFull 是否全拼 true:表示全拼 false表示:首字母* @return 拼音*/private static String convertHanzi2Pinyin(String hanzi, boolean isFull) {/**** ^[\u2E80-\u9FFF]+$ 匹配所有东亚区的语言* ^[\u4E00-\u9FFF]+$ 匹配简体和繁体* ^[\u4E00-\u9FA5]+$ 匹配简体*/String regExp = "^[\u4E00-\u9FFF]+$";StringBuffer sb = new StringBuffer();if (hanzi == null || "".equals(hanzi.trim())) {return "";}String pinyin = "";for (int i = 0; i < hanzi.length(); i++) {char unit = hanzi.charAt(i);//是汉字,则转拼音if (match(String.valueOf(unit), regExp)) {pinyin = convertSingleHanzi2Pinyin(unit);if (isFull) {sb.append(pinyin);} else {sb.append(pinyin.charAt(0));}} else {sb.append(unit);}}return sb.toString();}/*** 将单个汉字转成拼音** @param hanzi 汉字字符* @return 拼音*/private static String convertSingleHanzi2Pinyin(char hanzi) {HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);String[] res;StringBuffer sb = new StringBuffer();try {res = PinyinHelper.toHanyuPinyinStringArray(hanzi, outputFormat);sb.append(res[0]);//对于多音字,只用第一个拼音} catch (Exception e) {e.printStackTrace();return "";}return sb.toString();}/**** 匹配* <P>* 根据字符和正则表达式进行匹配** @param str 源字符串* @param regex 正则表达式** @return true:匹配成功  false:匹配失败*/private static boolean match(String str, String regex) {Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(str);return matcher.find();}}

首字母和首字母对应的数据集合对象:

import lombok.Data;import java.util.ArrayList;
import java.util.List;@Data
public class AreaLetter implements Comparable<AreaLetter>{private String letter;private List<String> list =new ArrayList<>();//需要按照首字母排序 实现Comparable接口@Overridepublic int compareTo(AreaLetter o) {return this.letter.compareTo(o.getLetter());}
}

//代码逻辑实现

public List<AreaLetter> getAreaLetter() {// 从数据库查询的姓名或者地址集合List<MeterReadingAreaEntity> list = meterReadingAreaService.getArea();List<String> stringList = new ArrayList<>();//将区域名称和编码拼接到一起for (MeterReadingAreaEntity meterReadingAreaEntity : list) {stringList.add(meterReadingAreaEntity.getMeterAreaName().trim()+","+meterReadingAreaEntity.getMeterAreaCode());}Comparator<Object> com= Collator.getInstance(java.util.Locale.CHINA);//将区域名称根据英文字母进行排序Collections.sort(stringList, com);List<AreaLetter> areaLetterList=new ArrayList<>();String str;AreaLetter areaLetter = new AreaLetter();//将相同读音的放在一起 多音字取第一个读音loop:for (int i = 0; i < stringList.size(); i++) {str= ChineseCharacterUtil.getUpperCase(stringList.get(i),false).substring(0,1);for (AreaLetter letter : areaLetterList) {if (letter.getLetter().equals(str)) {letter.getList().add(stringList.get(i));//跳转到指定位置继续执行 此处continue可以换成breakcontinue loop;}}if(i>0&&!(ChineseCharacterUtil.getUpperCase(stringList.get(i-1),false).substring(0,1)).equals(str)){areaLetter = new AreaLetter();areaLetter.setLetter(str);areaLetter.getList().add(stringList.get(i));areaLetterList.add(areaLetter);continue;}areaLetter.setLetter(str);areaLetter.getList().add(stringList.get(i));areaLetterList.add(areaLetter);}//根据字符串AreaLetter.getLetter()排序 如A,B,C,D,E,F,G...Collections.sort(areaLetterList);return areaLetterList;}

第一次写,是个菜鸟,有问题 希望大家指出来,谢谢大家

姓名,地址按照A,B,C......来排序java相关推荐

  1. 前端模拟自动解析手机号姓名地址

    前端模拟自动解析手机号姓名地址 // An highlighted block //自动识别事件autoDiscern: function (e) {const name = e // 传入的内容// ...

  2. java结果分行显示_编写一个java程序。分行显示自己的姓名,地址,电话!用Test.java命名。_学小易找答案...

    [单选题]16.骨骼肌进行完全强直收缩时,相邻两次刺激的时间间隔应 [填空题]实习岗位名称 [单选题]神经调节的基本方式是: [单选题]Thank you for your nice gifts. - ...

  3. 算法练习5---快速排序Java版

    基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成 ...

  4. 八大排序:Java实现八大排序及算法复杂度分析

    目录 QUESTION:八大排序:Java实现八大排序及算法复杂度分析 ANSWER: 一:冒泡排序 1.算法分析 2.时间复杂度分析 3.代码 二:选择排序 1.算法分析 2.时间复杂度分析 3.代 ...

  5. 计数排序和桶排序 java代码实现

    文章目录 计数排序 java代码实现 单元测试 桶排序 java代码实现 单元测试 计数排序 java代码实现 package csdn.dreamzuora.sort;import java.uti ...

  6. 二分排序java实现

    1.什么是二分排序: 二分排序是指利用二分法的思想对插入排序进行改进的一种插入排序算法,不同于二叉排序,可以利用数组的特点快速定位指定索引的元素: 算法思想:二分法插入排序是在插入第i个元素时,对前面 ...

  7. 希尔排序java代码_希尔排序及希尔排序java代码

    由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序按照此规律直到全部参与了排序.然后将间隔约定为4-1=3,然后 ...

  8. Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序

    Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序 一.概述 近期的开发工作中,遇到一个需求: ...

  9. Map排序(Java)

    Java中的Map排序问题 在Java编写程序的过程中,常常会碰到使用map(key,value)来记录数据的情况,有些时候我们需要根据实际需要来对map中的数据进行排序.以下就是个人总结的map排序 ...

最新文章

  1. 遇到大容量磁盘你该怎么办?
  2. FirstDay@JavaOne2017
  3. 【开源】分享一个前后端分离方案-前端angularjs+requirejs+dhtmlx 后端asp.net webapi
  4. OssImport系列之四——最佳实践
  5. JanusGraph 安装
  6. Linux文件下载和上传工具lrzsz
  7. vba替换字符串中的字符_R语言 | 字符串替换
  8. [转载] python| map()函数应用详解
  9. 手把手教你写个ORM(一)
  10. 每日算法系列【LeetCode 357】计算各个位数不同的数字个数
  11. mysql压测宕机_MySQL压测时Linux中断异常飚高,原来是因为...
  12. 第8章 多项式回归与模型泛化 学习笔记中
  13. 百度地图模拟签到考勤程序
  14. 软件项目管理课后习题——第1章软件项目管理概述
  15. 装上这些插件让Chrome大放异彩
  16. 室内地图导航功能接入流程
  17. 华中科技大学计算机证书领取,华中科技大学计算机水平测试软考报名通知
  18. 单元测试怎么就成了银弹?
  19. 网络游戏服务器端架构设计
  20. java aspx 验证码,asp 动态生成验证码

热门文章

  1. Hibernate分片
  2. 什么是web前端和后端?
  3. 【JQ】jQuery改变css伪元素样式
  4. oracle+x6-2+价格,Sun/Oracle Server X6-2服务器全新原包 现货出售
  5. js获取model里面的数据
  6. 利用深度学习来预测股票价格变动
  7. delph7中的状态栏学习statusbar
  8. 京东sign 算法app
  9. 周鸿祎:真想不通是张小龙这样的人做出了微信!
  10. IT程序员如何拿高薪?一位程序员自诉高薪秘诀