业务场景:

一个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. pandas 的数据结构(Series, DataFrame)

    Pandas 讲解 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标 ...

  2. 【Centos】systemd入门教程

    systemd使用教程 常用指令 运行一个服务: systemctl start <服务名> 关闭一个服务: systemctl stop <服务名> 重启一个服务: syst ...

  3. OpenGL基本框架与三维对象绘制

    上次我们介绍了OpenGL的环境构建和二维对象的绘制,这次我们来讲讲三维对象的绘制: 绘制代码如下: Github代码仓库 // opengltest2.cpp : Defines the entry ...

  4. Python——getpass

    getpass模块提供了可移植的密码输入,一共包括下面两个函数: 1. getpass.getpass() 2. getpass.getuser() getpass.getpass([prompt[, ...

  5. C# 校验Email(电子邮件)地址是否合法

    用于校验给定的Email地址是否合法,只针对用于提供的Email地址的格式,不对其是否真实存在进行校验. /// <summary> /// 验证EMail是否合法 /// </su ...

  6. PHP 开发者该知道的 5 个 Composer 小技巧

    From: https://segmentfault.com/a/1190000000355928 Composer是新一代的PHP依赖管理工具.其介绍和基本用法可以看这篇<Composer P ...

  7. Yii2.0 to(), toRoute(), current()区别用法

    [Url::current] - 现在测试本地路径(http://daxia.dc.weixin.com/mobile/hmConnections/user/verify-user) a: //获取当 ...

  8. 关于WSDL文件

    endpoint Name是在Service节点中指定的. 而非是binding.binding节点只是绑定soapaction.

  9. [译]Angular-ui 之 Url Routing

    ◄ 前一篇 (Multiple Named Views)     下一篇 (The Components) ► 在你的应用中多数的状态都是基于特定的url地址的.Url Routing机制绝不是在状态 ...

  10. FuzzyAutocomplete代码模糊匹配智能提示

    下载地址:https://github.com/FuzzyAutocomplete/FuzzyAutocompletePlugin Xcode 7.3.1 中已经对代码模糊匹配智能提示优化,已经不需要 ...