以前在外资不涉及到中文排序,目前滴滴有个需求是要按照中文首字母进行排序显示,还会有英文混合其中。

用到了一个第三方包。

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

封装了3个方法。可以根据list,map的key,map的value进行排序。返回类型与输入一致。

import net.sourceforge.pinyin4j.PinyinHelper;import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;public class SortByChineseUtil {public static List sort(List list) {return sortByChinese(list);}public static Map sortByKey(Map map) {ArrayList list = new ArrayList(map.keySet());List<String> sortList = sortByChinese(list);LinkedHashMap result = new LinkedHashMap();for (String str : sortList) {result.put(str, map.get(str));}return result;}public static Map sortByValue(Map map) {List<String> list = new ArrayList<String>(map.values());List<String> sortList = sortByChinese(list);LinkedHashMap result = new LinkedHashMap();for (String str : sortList) {result.put(getKey(map, str), str);}return result;}private static String getKey(Map map, String value) {for (Object key : map.keySet()) {if (map.get(key).equals(value)) {return key.toString();}}return null;}/*** 看是否是汉字,是汉字进行匹配* 看是否是英文,是英文直接转成小写加进去。* 其他则直接加* @param list* @return*/private static List sortByChinese(List<String> list) {TreeMap map = new TreeMap();String[] s = new String[list.size()];for (String str : list) {char[] chars = str.toCharArray();if (Character.toString(chars[0]).matches("[\\u4E00-\\u9FA5]+")) {String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(chars[0]);map.put(setMapKey(map,Character.toString(pinyinArray[0].charAt(0))), str);} else if (Character.toString(chars[0]).matches("[a-zA-Z]+")) {map.put(setMapKey(map,Character.toString(chars[0]).toLowerCase()), str);} else {map.put(setMapKey(map,Character.toString(chars[0])), str);}}List<String> result = new ArrayList<String>(map.values());return result;}/***  解决key一样会覆盖的问题 */private static String setMapKey(TreeMap map,String key){if(map.get(key) == null){return key;}else{return  key + key;}}
}

测试

 public static void main(String[] args) {HashMap map = new HashMap();map.put("2","日本");map.put("3","美国");map.put(1,"中国");map.put(77,"IT服务");map.put(8,"it");map.put(99,",");System.out.println(SortByChineseUtil.sortByValue(map));}

测试结果

{99=,, 8=it, 77=IT服务, 3=美国, 2=日本, 1=中国}进程已结束,退出代码 0

中英文混合按首字母排序相关推荐

  1. 中英文混合按照首字母排序

    中英文混合按照首字母排序 在项目做报表的时候,客户那边提出了默认按照客户的首字母排序,做完才发现有些客户的名字是英文,所以在这边写了一个混合排序的方法.思想就是:如果检查是汉语就把拼音的首字母附在汉字 ...

  2. mysql中英文姓名按照首字母排序_mysql 汉字根据首字母排序

    1:如果数据库表字段的字符编码是latin1_swedish_ci select * from tablename order by birary(name) asc ; tablename:数据库表 ...

  3. java中英文汉语混合排序_Java编程实现中英混合字符串数组按首字母排序的方法...

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...

  4. java中英文混合排序_Java编程实现中英混合字符串数组按首字母排序的方法

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...

  5. 英文首字母排序mysql_利用MySQL数据库来处理中英文取首字母排序

    [package com.syz;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import ja ...

  6. 用MySQL数据库来处理中英文取首字母排序

    我们的联系人列表经常会有按照首字母排序的需求. 这个很方便, 很清晰, 如果不说性能如何, 就像让数据库来做呢? 其实MySQL是支持的. 我们建立一个函数: DELIMITER $$ CREATE ...

  7. mysql 中英按字母排序_利用MySQL数据库来处理中英文取首字母排序

    很久都没有写博客了, 但是也积攒了了很多的问题, 下次找个时间一起整理一下, 然后记录下来, 以备不时之需. 我们的联系人列表经常会有按照首字母排序的需求.  这个很方便, 很清晰, 如果不说性能如何 ...

  8. MySQL数据库处理中英文取首字母排序

    需求:联系人列表按照首字母排序 通常如果表设计的时候增加了对应的首字母字段显然很好实现,如果没加,应该如何实现!? 数据库创建 函数 执行以下代码 CREATE DEFINER=``@`` FUNCT ...

  9. java实现字母排序_Java实现按中文首字母排序的具体实例

    要实现"按中文首字母排序"操作,可以使用java.util包下的arrays类的sort()函数. arrays类包含用来操作数组(比如排序和搜索)的各种方法. 比如对于排序操作的 ...

最新文章

  1. dreamweaver在onLoad运行RecordsetFind.htm时出错
  2. python学到什么程度可以做兼职-Python学到什么程度就可以找工作?
  3. 2015-2016 Petrozavodsk Winter Training Camp, Nizhny Novgorod SU Contest
  4. 一文读懂熔断器和重试机制
  5. mysql command line client和mysql.exe输入密码后闪退问题解决方法
  6. ubuntu fstab 示例
  7. img标签 三种获取数据方式
  8. 2021年中国电动气动控制器市场趋势报告、技术动态创新及2027年市场预测
  9. 使用GDAL下载并转换SRTM的DEM数据(一)
  10. python 元组的一点问题
  11. ORA-01031:insufficient privileges
  12. itextPdf pdf加水印
  13. Rendezvous机制完成数据交互。Rendezvous是一个基于—_者一__者模型设计的抽象类。
  14. specular图使用方法_次世代贴图教程_SPECULAR、SPECULAR POWER原理教程
  15. 原创超简单代码(1.21.50)
  16. Http调用第三方接口的两种方式实例《超详细!!!》***
  17. 2020届一轮复习高中数学必考点高中函数知识点总结(纯干货)
  18. MagicLicense破解记录
  19. 独家 度小满教育、医美分期不做直营了
  20. SEPM执行LiveUpdate 失败,错误“磁盘空间不足...”

热门文章

  1. 常见的敏感文件泄漏总结
  2. CF1770F Koxia and Sequence
  3. 第九章 在网页中创建超链接
  4. mybatis-plus的基础入门
  5. python数据模块下载顺序_对Python random模块打乱数组顺序的实例讲解
  6. 怎么高考考入清华大学计算机系,看牛人考研 通过何种手段考取清华计算机系...
  7. 健康 特色 小吃技术
  8. 集合概述二(Set接口+HashSet集合+LinkedHashSet集合+TreeSet集合)
  9. 计算机辅助设计在中国的现状,解析中国CAD市场发展现状及未来趋势
  10. 加密托管风起:做区块链世界的银行