业务场景:

一个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. IDEA中 @override报错的解决方法

    今天用IDEA导入一个java工程时,碰上一个问题,代码中所有@override处标红,并提示:@override不支持对接口的实现. 网上百度了一下发现, 原因是引用JDK5版本中存在小bug的问题 ...

  2. 推荐vue.js、layer.js、axios.js

    都是很简单又很实用的东西. vue.js,前端双向绑定框架. layer.js,前端遮罩层框架.(layui的一部分,可单独使用) axios.js,异步请求框架,用起来比jQuery的ajax舒服一 ...

  3. 第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点 1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题

  4. e783. 监听对JList中项双击和三击

    // Create a list String[] items = {"A", "B", "C", "D"}; JLis ...

  5. C#-----------------------------回收机制中Destroy与null的作用

    关于Object被Destroy之后,该Object的原引用==null的问题 标签: unityc#继承对象 2017-01-23 23:32 506人阅读 评论(0) 收藏 举报  分类: Uni ...

  6. Python——dummy_thread( _dummy_thread in Python 3.+)

    dummy_thread 模块在Python 3中改称为 _dummy_thread 模块,Python 的 2to3 工具能够帮你自动的更改旧代码中的模块名称.不过更推荐使用高层次的 dummy_t ...

  7. MySQL binlog日志操作详解

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. bi ...

  8. 二维数组按某个键值排序 FOR PHP

    $arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...

  9. Logback中文文档(四):Appender

    什么是 Appender Appender是负责写记录事件的组件.Appender 必须实现接口"ch.qos.logback.core.Appender".该接口的重要方法总结如 ...

  10. Java-Tomcat for Mac配置

    1.eclipse version: Eclipse Java EE IDE for Web Developers. Version: Oxygen.1 Release (4.7.1) Build i ...