说明

主要是之前和别人讨论排序问题,当时碰到的问题是,需要按照中文第一个字的拼音首字母排序,百度发现自带的比较器 Collator.getInstance(Locale.CHINA) ,但是使用和追源码发现

    @Overridepublic int compare(Object o1, Object o2) {return compare((String)o1, (String)o2);}

这里它只支持传入String类型,所以打算做一个加强版。采用注解确定实体哪个字段参与排序。

github地址

比较器 InitialsChinaComparator

    @Overridepublic int compare(Object o1, Object o2) {try {Field[] o1Fields = getFields(o1);String source = "";String target = "";// 获取字段值for (Field o1Field : o1Fields) {CompareString compareString = o1Field.getAnnotation(CompareString.class);if (compareString != null) {source = (String) getValueByFieldNameByGetMethod(o1, o1Field.getName());break;}}// 获取字段值Field[] o2Fields = getFields(o2);for (Field o2Field : o2Fields) {CompareString compareString = o2Field.getAnnotation(CompareString.class);if (compareString != null) {target = (String) getValueByFieldNameByGetMethod(o2, o2Field.getName());break;}}// 比较Collator collator = Collator.getInstance(Locale.CHINA);return this.order*collator.compare(source, target);} catch (Exception e) {throw new RuntimeException(e.getMessage());}}

使用

实体
public class TestCompare {// 标记参与排序@CompareStringprivate String name;...// getter// setter}
排序
List<TestCompare> tests = new ArrayList<TestCompare>();
TestCompare test1 = new TestCompare("杨");
TestCompare test2 = new TestCompare("白");
TestCompare test3 = new TestCompare("康");tests.add(test1);
tests.add(test2);
tests.add(test3);Collections.sort(tests, new InitialsChinaComparator(InitialsChinaComparator.DESC));for(TestCompare test:tests) {System.out.println(test.getName());}

最后

欢迎大佬们指导

中文拼音首字母排序比较器相关推荐

  1. [转载]ExtJS中grid按照中文拼音首字母排序、改变行背景、列背景、静态数据分页不再困难...

    代码 1 本示例主要使用到了静态数据分页 Ext.data.PagingMemoryProxy组件.Ext.PagingToolbar分页条.viewConfig的getRowClass 方法.列co ...

  2. oracle 中文拼音取首字母,ORACLE依据中文拼音首字母排序、取得中文拼音首字母函数...

    当前位置:我的异常网» 数据库 » ORACLE依据中文拼音首字母排序.取得中文拼音首字母 ORACLE依据中文拼音首字母排序.取得中文拼音首字母函数 www.myexceptions.net  网友 ...

  3. mysql 按照中文拼音首字母排序

    ORDER BY convert(name using gbk) ASC

  4. List 之按照中文拼音首字母排序

    public class TestCompare {private static Comparator comparator=Collator.getInstance(java.util.Locale ...

  5. 中文按拼音首字母排序的C++实现方案

    先介绍下背景,最近有个需求,需要将用户的好友列表按照昵称的拼音首字母排序,类似于手机电话簿的联系人.一开始建议让终端同学去做这点,毕竟终端现有的电话簿模块已经实现了,不过终端同学说电话簿是系统组件,移 ...

  6. MySQL中文无法按照拼音首字母排序解决方法convert(name USING gbk)

    问题如下: 使用默认的order by函数无法对中文数据按照首字母进行排序 SELECT * FROM `test_table` ORDER BY company_name,reply_room_na ...

  7. mysql表中文字段提取拼音首字母最便捷实现,中文按拼音首字母排序

    mysql表中文字段提取拼音首字母 SELECT a.提取字段, IFNULL(ELT(INTERVAL (CONV(HEX(left(CONVERT(a.提取字段 USING gbk), 1)), ...

  8. Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)(示例代码)

    简介  这篇文章主要介绍了Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)(示例代码)以及相关的经验技巧,文章约21106字,浏览量320,点赞数5,值得参考! ...

  9. Java 按照拼音首字母排序

    默认的 Collection.sort() 是按照 ASCII 码排序, 不过, 有第二个重载方法, 第二个参数可以传入 Comparator 对象 java.text.Collator 可以用于本地 ...

最新文章

  1. 《Ext JS高级程序设计》节选: 一个结合DataWrite和RowEditor的Grid示例(1)
  2. TypeError: iter() returned non-iterator of type
  3. oracle rman 跨版本恢复 11.2.0.3- 11.2.0.4
  4. javaweb学习总结(四十二)——Filter(过滤器)学习
  5. ubuntu如何调出python_ubuntu|linux下 如何用python 模拟按键
  6. 五年引用量最高的10大AI论文:Adam第一,Transformer上榜,竟然没有ResNet?
  7. Web开发——问题:js/css文件修改提交后,没有效果
  8. python 字符串前面的“r“是个啥?
  9. matlab 3sls,几种常用的计量经济学软件
  10. Hyperchain 超块链创始人史兴国对谈杨民道:新公链赛道烽烟再起,move语言能开启下一轮牛市吗?
  11. Loadrunner教程
  12. html5 canvas图片反色
  13. LOJ 6437 [PKUSC 2018] PKUSC
  14. 数学分析高等代数考研试题荟萃[更新至2017年12月28日]
  15. three.js例子
  16. 阿里专家直击前端盛会JSConf2017_Day2:见证Moment.js精彩分享
  17. JDK14新特性之Record
  18. 《两种文化与科学革命》读后感
  19. coteditor mac版文本编辑器
  20. 基于Python_opencv的车牌识别系统

热门文章

  1. PHP 常用字符串、数组处理函数
  2. 挺带劲!通过 Nginx 来实现封杀恶意访问
  3. 汇编8086复习——基础知识、指令汇总、上机实验踩坑
  4. 舵机 - 什么是舵机
  5. Node.js文件系统-文件操作(一)
  6. 关于数据中台、数据平台、数据仓库、数据湖等数据概念的对比解析
  7. PostgreSQL-Docker创建PostgreSQL数据库并导入矢量数据
  8. 计算机毕业设计ssm社区爱心活动网站be83l系统+程序+源码+lw+远程部署
  9. uniapp picker选择器注意点
  10. 如何正确地给固态硬盘(SSD)分区