姓名,地址按照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. 2007年你必须学习的10项.NET技术
  2. P1843 奶牛晒衣服(贪心)
  3. 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)...
  4. python可以做什么系统-用python做推荐系统(一)
  5. isdigit函数python检测数字个数_Python isdecimal isdigit isnumeric区别
  6. mysql dba系统学习(14)mysql用户管理之一、二
  7. 反射_Class对象功能_获取Field
  8. Rand7()实现Rand10()
  9. .net Core 学习笔记(实体字段映射,IOC注入)
  10. 怎样用UE4把一个Actor直接打包成Pak
  11. 爆裂:未来社会的 9 大生存原则
  12. 手把手教你使用《ProxyMan》抓取App接口
  13. 拿来就能用的前端酷炫登录注册模板
  14. 【C51】单片机芯片之——图解74HC595
  15. 【oracle11g,13】表空间管理2:undo表空间管理(调优) ,闪回原理
  16. xml大于等于转移_Mybatis.xml文件中大于小于等于
  17. 小记--解决方案: rsyslogd cpu占用率高
  18. ARMv8 Linux内核head.S源码分析
  19. 解决github.io 连接不安全,无法访问
  20. zookeeper代码实现常用命令 - 雨中散步撒哈拉

热门文章

  1. 黄岩机器人产业园_投资50亿元 “新松机器人”落户台州
  2. java画雪花_java分形绘制科赫雪花曲线(科赫曲线)代码分享
  3. 如何学好PROE软件?
  4. 京城、京味、京韵:从一台服务器看数字北京
  5. Monospace/Fixed Width Programmer's Fonts
  6. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识
  7. 三十二楼层选几层最好_特大事件!1-32高楼层选最佳楼层 32层的电梯楼买房子几楼最好 黄金楼层...
  8. MSDN i tell you 下载说明
  9. 数字书法教室教学软件系统的应用范围
  10. STM32F103 PB3 PB4 设置成普通GPIO的配置