Java8对中文汉字排序的Comparator实现类

最近由于工作需要需要对中文汉字排序,编写了Comparator实现类分享给大家。

直接上代码:


import java.util.Comparator;public class ChineseComparator<T> implements Comparator<T> {private static boolean isDigit(char ch) {return ch >= 48 && ch <= 57;}/*** Length of string is passed in for improved efficiency (only need to calculate it once)**/private static String getChunk(String s, int slength, int marker) {StringBuilder chunk = new StringBuilder();int index = marker;char c = s.charAt(index);chunk.append(c);index++;if (isDigit(c)) {while (index < slength) {c = s.charAt(index);if (!isDigit(c)) {break;}chunk.append(c);index++;}} else {while (index < slength) {c = s.charAt(index);if (isDigit(c)) {break;}chunk.append(c);index++;}}return chunk.toString();}@Overridepublic int compare(Object o1, Object o2) {if (!(o1 instanceof String) || !(o2 instanceof String)) {return 0;}String s1 = (String) o1;String s2 = (String) o2;return compareString(s1,s2);}public static int compareString(String s1,String s2){if(s1 == null){return 1;}if(s2 == null){return -1;}int thisMarker = 0;int thatMarker = 0;int s1Length = s1.length();int s2Length = s2.length();while (thisMarker < s1Length && thatMarker < s2Length) {String thisChunk = getChunk(s1, s1Length, thisMarker);thisMarker += thisChunk.length();String thatChunk = getChunk(s2, s2Length, thatMarker);thatMarker += thatChunk.length();//如果两个字符块都是数字,则按数字排序int result;if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0))) {result = compareDigit(thisChunk,thatChunk);if (result != 0) {return result;}} else {result = thisChunk.compareTo(thatChunk);}if (result != 0) {return result;}}return s1Length - s2Length;}/*** 按数字比较*/private static int compareDigit(String thisChunk,String thatChunk){int thisChunkLength = thisChunk.length();int result = thisChunkLength - thatChunk.length();if (result == 0) {//诸位比较for (int i = 0; i < thisChunkLength; i++) {result = thisChunk.charAt(i) - thatChunk.charAt(i);if (result != 0) {return result;}}}return result;}}

使用方法:

    public static void main(String[] args) {Map<String, Object> map = new HashMap<String, Object>();map.put("name", "高一(1)班");map.put("age", 13);Map<String, Object> map2 = new HashMap<String, Object>();map2.put("name", "高一(11)班");map2.put("age", 15);Map<String, Object> map3 = new HashMap<String, Object>();map3.put("name", "高一(1)班");map3.put("age", 20);Map<String, Object> map4 = new HashMap<String, Object>();map4.put("name", "高一(2)班");map4.put("age", 18);List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();list.add(map);list.add(map2);list.add(map3);list.add(map4);System.out.println("排序前:"+list);List<Map> collect =list.stream().sorted((o1, o2) -> ChineseComparator.compareString(o1.get("name")+"",o2.get("name")+"")).collect(Collectors.toList());System.out.println("排序后:"+collect);}

运行结果如下:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/71419.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Collectors.toMap mergeFunction参数,(o1,o2)->o1的含义

文章目录 前言结论代码示例源码分析 前言 在java8 Stream流中经常有看到这么一种写法Collectors.toMap(Person::getName, Function.identity(),(o1, o2)->o2), 经常会比较好奇o1,o2指的是什么含义&#xff0c;本篇博文主要讲解o1,o2的含义。 结论 这里使用(o1, o2)->o…

O2OA:移动办公市场中的另一股清流

相比多数管理软件为外资品牌主导的尴尬局面&#xff0c;移动OA市场罕有为国产厂商独霸天下。 一方面&#xff0c;随着中国经济的蓬勃发展&#xff0c;企业数量快速增长。有资料显示&#xff0c;截至2017年三季度末&#xff0c;全国工商注册的中小企业总量超过4200万家&#xff…

公开信呼吁,所有 AI 实验室应立即暂停训练比 GPT-4 更强大的 AI 模型?

呼吁所有 AI 实验室立即暂停训练比 GPT-4 更强大的 AI 系统&#xff0c;为期至少 6 个月。 本文转自&#xff1a;机器之心 人们一直在说 ChatGPT 有风险&#xff0c;OpenAI CEO 也这么说&#xff0c;现在终于有人出手了。 在 GPT-4 诞生两周之际&#xff0c;一封公开信正在社交…

交互式数据分析和处理新方法:pandas-ai =Pandas + ChatGPT

Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series和DataFrame)。 在人工智能领域&#xff0c;Pandas经常用于机器学习和深度学习过程的预处理步骤。Pandas通过…

GPT-4将在下周发布!!

来源&#xff1a;学术头条 GPT-4 将在下周发布&#xff01;&#xff01; 3 月 9 日&#xff0c;微软德国 CTO Andreas Braun 在一场名为 “AI in Focus - Digital Kickoff” 的活动中表示&#xff0c;GPT-4 将在下周发布&#xff0c;将提供多模态模型。自 3 月初发布 Kosmos-1 …

用LangChain构建大语言模型应用

用LangChain构建大语言模型应用 自 ChatGPT 发布以来&#xff0c;大型语言模型 (LLM) 广受欢迎。尽管您可能没有足够的资金和计算资源从头开始训练自己的大语言模型&#xff0c;但您仍然可以使用预训练的大语言模型来构建一些很酷的东西&#xff0c;例如&#xff1a; 可以根据…

开发一个App大概要多少钱?只讲干货

结合自己的各种采坑失败经验以及周边个别成功试水经验&#xff0c;站在个人角度给出一些理解。 APP制作有多种形式&#xff0c;所以需要的成本差异较大。 1.寻找外包公司 2.模板APP&#xff08;内行叫SAAS&#xff09; 3.自己组建团队 互联网外包公司的成本构成&#xff1f…

chatgpt赋能python:为什么Python报错GBK,如何解决?

为什么Python报错GBK&#xff0c;如何解决&#xff1f; Python 是一种广泛使用的编程语言&#xff0c;但在使用过程中经常会出现 “GBk” 相关报错。本文将探讨这种报错的原因和解决方法。 什么是GBK&#xff1f; GBK 是中文编码&#xff0c;是用来在计算机上表示中文字符集…

谷歌如何注册账号?手机号无法验证处理方法!2023年最新教程!

最近学会了如何爬网站&#xff0c;然后在观看油管过程中&#xff0c;想要注册一个油管账号&#xff0c;也就是谷歌账号。但是在注册过程中&#xff0c;您发现无法使用手机号进行验证。您已经查阅了一些解决方法&#xff0c;不过没有解决&#xff0c;最后钞能力在某宝&#xff0…

【实战案例】分享6种常用的信用卡欺诈检测算法(附 Python 代码)

大家好&#xff0c;本文旨在使用 XGBoost、随机森林、KNN、逻辑回归、SVM 和决策树解决信用卡潜在欺诈的分类问题&#xff0c;内容较长&#xff0c;建议收藏、点赞。 文章目录 技术提升案例简介导入相关模块导入数据探索性数据分析特征选择和数据集拆分模型建立模型评估准确率F…

计算机毕业设计(附源码)python信用卡逾期数据处理分析系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

毕业论文使用的卡方检验该如何分析?

一、卡方检验基本说明 有时&#xff0c;在研究中某个随机变量是否服从某种特定的分布是需要进行检验的。可以根据以往的经验或者实际的观测数据分布情况&#xff0c;推测总体可能服从某种分布函数F&#xff08;x&#xff09;。卡方检验就是这样一种用来检验给定的概率值下数据…

金融学毕业论文选题哪些比较少人写而且资料比较多的?

提到金融学专业&#xff0c;你的第一印象是什么&#xff1f; 或许是金融学专业&#xff0c;是一个非常吸金的专业&#xff0c;又或者金融学专业是比较难考的专业&#xff0c;在这学习金融学专业的人都非常厉害&#xff0c;因为金融学非常难学&#xff0c;涉及的领域非常广。 …

教资教育知识与能力中学生发展心理

5.1 心理发展特征 1、中学生心理发展的一般特点【选择/材料】独闭不会过动 独立性&#xff1a;成人感、独立意识 闭锁性&#xff1a;不轻易表露内心世界 不平衡性&#xff1a;心理发展有时落后生理发展 社会学&#xff1a;关注社会生活 过渡性&#xff1a;半幼稚、半成熟…

缺考计算机软件考试影响诚信吗,教资缺考一次会被记入诚信档案?会影响之后的考试?...

大家好&#xff0c;我是小灵通岳麓sir 关注我(csylzxxy)&#xff0c;了解更多相关资讯 很多小伙伴都想问&#xff1a;如果没能去参加考试&#xff0c;会影响下一次报考&#xff1f;听说还会被记入诚信档案&#xff1f;那么不去考试&#xff0c;会不会造成严重的影响呢&#xff…

教资手机报名就5步

愁不想开电脑怎么办呢&#xff1f;就看到一个帖子说苹果手机可以直接报名教师资格证1手机 开心坏了&#xff0c;躺在床上就把名报了&#xff0c;随便给大家做了一份攻略&#xff0c;超级简单&#xff0c;只需5步。 第一步&#xff1a; 就是打开你的手机搜索【中国教育考试网】&…

教资信息技术

笔记↓ 导入新课 引导学生进入学习状态 创设情境 激发学生学习兴趣&#xff0c;使注意力快速集中到课堂上。通过多媒体展现生活实例&#xff0c;讲故事&#xff0c;做游戏。 温故知新 新旧知识之间有联系&#xff0c;适合逻辑复杂内容充实的课程&#xff0c;帮助学生把本课体系…

教师资格证报名照片有什么要求?这些小细节要注意

教师资格证报名照片有什么要求吗&#xff1f;教师资格证考试也是每年当中比较火热的一门考试&#xff0c;很多小伙伴都会在大学期间想要考到教师资格证&#xff0c;想要在毕业之后当一名老师。但是我们在报名的时候是需要上传照片的&#xff0c;很多小伙伴不知道教师资格证报名…

考计算机二级能带帽子吗,教资报名要注意这几点,否则无法通过审核,考区问题最容易出错...

原标题&#xff1a;教资报名要注意这几点&#xff0c;否则无法通过审核&#xff0c;考区问题最容易出错 最近&#xff0c;又到了教师教师证报名的时期&#xff0c;不出意料&#xff0c;系统又面临短暂的崩溃。说到教资&#xff0c;资格证是除了高考以外&#xff0c;每年报考人数…

2021下半年教资信息技术学科知识与教育能力——主观题

二、简答题&#xff08;本大题共3小题&#xff0c;每小题10分&#xff0c;共30分&#xff09; 16.人工智能的应用给人类生活带来了巨大的变化&#xff0c;也带来了一些问题。请列举三个涉及个人隐私泄露问题的场景并进行简要说明。 (1)购物网站会推送一些自己近期提到的商品或类…