业务场景:

一个list集合,里面add了若干个实体类,针对该实体类排序的属性为String。

使用技术,自定义list排序(JDK自带),重写Comparator接口的compare方法,汉字转拼音技术:使用的pinyin4j。

pinyin4j官网地址:http://pinyin4j.sourceforge.net/

不想去官网下载的我这里也有,地址为:

//tempRateList 为需要进行自定义排序的集合,SpRate为该集合的实体类,riskName为排序的属性。

直接上方案:

1、导入pinyin4j-2.5.0.jar;

2、对自定义排序的类使用以下方法进行自定义排序;

  1. Collections.sort(tempRateList,new Comparator<SpRate>() {
  2. @Override
  3. public int compare(SpRate s1, SpRate s2) {
  4. String o1 = s1.getRiskName();
  5. String o2 = s2.getRiskName();
  6. for (int i = 0; i < o1.length() && i < o2.length(); i++) {
  7. int codePoint1 = o1.charAt(i);
  8. int codePoint2 = o2.charAt(i);
  9. if (Character.isSupplementaryCodePoint(codePoint1)
  10. || Character.isSupplementaryCodePoint(codePoint2)) {
  11. i++;
  12. }
  13. if (codePoint1 != codePoint2) {
  14. if (Character.isSupplementaryCodePoint(codePoint1)
  15. || Character.isSupplementaryCodePoint(codePoint2)) {
  16. return codePoint1 - codePoint2;
  17. }
  18. String pinyin1 = PinyinHelper.toHanyuPinyinStringArray((char) codePoint1) == null
  19. ? null : PinyinHelper.toHanyuPinyinStringArray((char) codePoint1)[0];
  20. String pinyin2 = PinyinHelper.toHanyuPinyinStringArray((char) codePoint2) == null
  21. ? null : PinyinHelper.toHanyuPinyinStringArray((char) codePoint2)[0];
  22. if (pinyin1 != null && pinyin2 != null) { // 两个字符都是汉字
  23. if (!pinyin1.equals(pinyin2)) {
  24. return pinyin1.compareTo(pinyin2);
  25. }
  26. } else {
  27. return codePoint1 - codePoint2;
  28. }
  29. }
  30. }
  31. return o1.length() - o2.length();
  32. }
  33. });

3、方法结束后  tempRateList 对象就完成了自定义排序

java 对 汉字排序(按照拼音字母排序)的更多相关文章

  1. JAVA中汉字的Compare排序

    当调用String.compare方法的时候,比较的是Unicode码,并不能对汉字进行准确的排序,所以汉字比较时会出现比较混乱的结果. java.text.Collator类中有一个getInsta ...

  2. Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序

    发布时间:2018-11-16   技术:Android   概述 最近要做一个类似微信的,在登录界面选择国家地区的功能,微信有中文汉字笔画排序以及中文拼音排序等几种方式,如下所示: 简体中文 拼音排 ...

  3. Java面试宝典系列之基础排序算法

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  4. Spark基础排序+二次排序(java+scala)

    1.基础排序算法 sc.textFile()).reduceByKey(_+_,).map(pair=>(pair._2,pair._1)).sortByKey(false).map(pair= ...

  5. Java比较器对数组,集合排序一

    数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...

  6. Java基础知识强化51:经典排序之桶排序(BucketSort)

    1. 首先说明三点: (1)桶排序是稳定的 (2)桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 (3)桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 2. 桶排序的分析 ...

  7. java结构与算法之选择排序

    一 .java结构与算法之选择排序(冒择路兮快归堆) 什么事选择排序:从一组无序数据中选择出中小的的值,将该值与无序区的最左边的的值进行交换. 简单的解释:假设有这样一组数据 12,4,23,5,找到 ...

  8. JavaScript ,Python,java,Go系列算法之选择排序

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等. 用一张图概括:   选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n2) ...

  9. 使用C语言和Java分别实现冒泡排序和选择排序

    经典排序算法--冒泡和选择排序法 Java实现冒泡排序 基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素放到顶端,最终达到完全有序,首先看个动图: 我们要清楚 ...

  10. java排序算法(八):希尔排序(shell排序)

    java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...

随机推荐

  1. 使用Selenium来抓取动态加载的页面

    原文:http://my.oschina.net/flashsword/blog/147334?p=1 一般的爬虫都是直接使用http协议,下载指定url的html内容,并对内容进行分析和抽取.在我写 ...

  2. Android 8 声音调整过程

    记录Android 8声音调整过程. frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.j ...

  3. elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)

    一.查询建议介绍 1. 查询建议是什么? 查询建议,为用户提供良好的使用体验.主要包括: 拼写检查: 自动建议查询词(自动补全) 拼写检查如图: 自动建议查询词(自动补全): 2. ES中查询建议的A ...

  4. 参考论坛:Mali kernel driver TX011-SW-99002-r5p1-00rel0 for firefly

    最近手头有一块firefly_rk3288_reload的开发板,想实现在linux 下用openGL ES来做视频显示. 找到opengGL相关移植,参考论坛(http://bbs.t-firefl ...

  5. (转)常见LCD接口

    LCD常用接口原理 点击打开链接 点击打开链接 点击打开链接 点击打开链接 点击打开链接 点击打开链接 点击打开链接 点击打开链接 xubin 平台信息:内核:linux2.6/linux3.0系统: ...

  6. JsonObject和Gson详解

    参考文件:http://www.cnblogs.com/xwdreamer/archive/2011/12/16/2296904.html一.JsonObject 1.JAR包简介 要使程序可以运行必 ...

  7. Python——eventlet.backdoor

    eventlet.backdoor 是正在运行中的进程内的 Pyhon 交互解释器. 该模块便于检测一个长期运行进程的运行状态,提供了一种可以不阻塞应用正常操作的 Pyhon 交互解释器,从而极大地方 ...

  8. Git的杀手级功能之 一 远程仓库

    Git的杀手级功能之一:远程仓库 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上. 一.注册GitHub账号,然后和本地Git仓库来关联免费获得Git远程仓库来学校git的远程仓 ...

  9. bioerl 获取gi号

    代码示例: use Bio::DB::EUtilities; my @ids = qw(CAB02640 EAS10332 YP_250808 NP_623143 P41007); my $facto ...

  10. 《构建高性能web站点》读书笔记:CPU/IO并发策略

    服务器并发处理能力:单位时间内处理的请求数,吞吐率,reqs/s apache的mod_status,显示的 requests/sec,从启动开始的平均计算值.lighttpd的mod_status显 ...