Java按照GBK拼音顺序对汉字排序

最近遇到一个需求,需要对一个列表数据的特定字段,比如姓名,初看应该不难,但是有什么比较快速便捷的方法,因为是Java的项目,所以想到比较火的工具框架Hutool,在Hutool官网 找到一个比较器类PinyinComparator

在这里插入图片描述

实验环境准备

  • JDK 1.8
  • SpringBoot 3.3.0
  • Maven 3.3.9
  • Hutool 5.7.1
  • 开发工具
    • IntelliJ IDEA
    • smartGit

代码实现

基于jdk8的集合列表遍历,将hutool的PinyinComparator传入即可

@Test
public void testComparator() {List<RecordDto> list = Lists.newArrayList();RecordDto record01= new RecordDto();record01.setStuName("风清扬");RecordDto record02= new RecordDto();record02.setStuName("小明");RecordDto record03= new RecordDto();record03.setStuName("杰克");list.add(record01);list.add(record02);list.add(record03);list = list.stream().sorted(Comparator.comparing(RecordDto ::getSName, new PinyinComparator())).collect(Collectors.toList());list.stream().forEach(e -> {System.out.println(e.getSName());});
}

在这里插入图片描述

源码实现

PinyinComparator也是基于Comparator接口

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package cn.hutool.core.comparator;import java.io.Serializable;
import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;public class PinyinComparator implements Comparator<String>, Serializable {private static final long serialVersionUID = 1L;final Collator collator;public PinyinComparator() {this.collator = Collator.getInstance(Locale.CHINESE);}public int compare(String o1, String o2) {return this.collator.compare(o1, o2);}
}

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

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

相关文章

python离线安装第三方库、及其依赖库(单个安装,非批量移植)

文章目录 1.外网下载第三方库、依赖库2.内网安装第三方库3.补充附录内网中离线安装python第三方库,这时候只能去外网手动下载第三方库,再传回内网进行安装。 问题是python第三方库往往有其前置依赖包,你很难清楚某个第三方库依赖的是哪些依赖包,更难受的是依赖包可能还有其…

CyclicBarrier改善CountDownLatch循环重入

CyclicBarrier 跟CountDOwnLatch非常类似&#xff0c;也是计时结束执行。 区别就是可以重用&#xff0c;也就是基数可以回到初始值。用完了不需要重新创建对象。 谁调用await就阻塞谁&#xff0c;这个能阻塞多个&#xff0c;countdownlatch只能阻塞一个。 变为0之后 再次调用…

如何集成 Spring Security 和 JWT,

关键问题&#xff1a; 如何集成 Spring Security 和 JWT&#xff0c;并实现用户认证和授权&#xff1f; SpringSecurity核心是一组过滤器链&#xff0c;JWT是生成token的机制 代码操作&#xff1a; 关于jwt: 1.yml配置中加入jwt配置信息 2.JWT token的JwtUtils.java--生成…

五十一、openlayers官网示例Layer Min/Max Resolution解析——设置图层最大分辨率,超过最大值换另一个图层显示

使用minResolution、maxResolution分辨率来设置图层显示最大分辨率。 <template><div class"box"><h1>Layer Min/Max Resolution</h1><div id"map" class"map"></div></div> </template><…

leetcode-13-[110]平衡二叉树[257]二叉树的所有路径[404]左叶子之和[222]完全二叉树的节点个数

一、[110]平衡二叉树 注意&#xff1a;注释的1、2两处得有返回值-1 class Solution {public boolean isBalanced(TreeNode root) {int result getHeight(root);return result ! (-1);}//高度public int getHeight(TreeNode node){if(nodenull){return 0;}int lh getHeight(…

Java 8 Stream API介绍

Java 8引入了Stream API&#xff0c;这是对集合框架的一种增强&#xff0c;它允许你以一种声明式的方式处理数据集合。Stream API的核心在于将数据的操作分为两个主要阶段&#xff1a;中间操作和终端操作。中间操作返回的是一个新的Stream&#xff0c;可以链式调用多个中间操作…

基于Windows API DialogBox的对话框

在C中&#xff0c;DialogBox函数是Windows API的一部分&#xff0c;它用于在Win32应用程序中创建并显示一个模态对话框。DialogBox函数是USER32.DLL中的一个导出函数&#xff0c;因此你需要在你的C Win32应用程序中链接到这个库。 #include "framework.h" #include …

网信办公布第六批深度合成服务算法备案清单,深兰科技大模型入选

6月12日&#xff0c;国家互联网信息办公室发布了第六批深度合成服务算法备案信息&#xff0c;深兰科技硅基知识智能对话多模态大模型算法通过相关审核&#xff0c;成功入选该批次《境内深度合成服务算法备案清单》。同时入选的还有腾讯混元大模型多模态算法、支付宝图像生成算法…

个人职业规划(含前端职业+技术线路)

1. 了解自己的兴趣与长处 喜欢擅长的事 职业方向 2. 设定长期目标&#xff08;5年&#xff09; 目标内容 建立自己的品牌建立自己的社交网络 适量参加社交活动&#xff0c;认识更多志同道合的小伙伴寻求导师指导 建立自己的作品集 注意事项 每年元旦进行审视和调整永葆积极…

【MySQL】(基础篇十五) —— 增删改数据

增删改数据 本文介绍如何利用SQL的INSERT语句将数据插入表中。以及如何利用UPDATE和DELETE语句进一步操纵表数据。 数据插入 INSERT是用来插入&#xff08;或添加&#xff09;行到数据库表的。插入可以用几种方式使用 插入完整的行&#xff1b;插入行的一部分&#xff1b;插…

jquery动态效果插件之ScrollMagic

ScrollMagic 是一个强大的 JavaScript 库,可以帮助开发者在页面滚动时触发各种动画效果。它支持复杂的滚动交互,非常适合制作富交互的网页。 这里他使用了ScrollMagic的几种滚动效果: 视差滚动效果:页面上的一些元素在滚动时会产生视差滚动效果,即元素以不同的速度移动,营造出…

Linux 查看 CPU核数 及 内存

-- 核数 cat /proc/cpuinfo| grep "processor"| wc -l -- 内存 cat /proc/meminfo # 总核数 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| s…

Kotlin 变量详解:声明、赋值与最佳实践指南

Kotlin 变量 变量是用于存储数据值的容器。 要创建一个变量&#xff0c;使用 var 或 val&#xff0c;然后使用等号&#xff08;&#xff09;给它赋值&#xff1a; 语法 var 变量名 值 val 变量名 值示例 var name "John" val birthyear 1975println(name) …

__autoload 函数和sql_autoload_register函数

目录 __autoload定义 __autoload使用 sql_autoload_registe定义 sql_autoload_registe使用 __autoload定义 __autoload 函数在 PHP 5.1.0 版本中引入&#xff0c;用于在尝试使用尚未被定义的类时自动加载该类。 当 PHP 解释器遇到一个未定义的类时&#xff0c;如果存在 __…

C++初学者指南第一步---10.内存(基础)

C初学者指南第一步—10.内存&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---10.内存&#xff08;基础&#xff09;1.内存模型1.1 纸上谈兵&#xff1a;C的抽象内存模型1.2 实践&#xff1a;内存的实际处理 2. 自动存储3.动态存储&#xff1a;std::vector3.1 动态内…

Redis缓存的一些概念性问题

目录 缓存模型和思路 缓存更新策略 数据库和缓存不一致 缓存与数据库双写一致 缓存穿透 缓存雪崩 缓存击穿 速度快,好用&#xff0c;内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力 缓存模型和思路 标准的操作方式就是查询数据库之前先…

C语言 图的基础知识

图 图的基本概念图的存储方法**邻接矩阵**&#xff1a;邻接表 图的遍历深度优先&#xff08;DFS&#xff09;广度优先&#xff08;BFS&#xff09; 最小生成树Prim算法Kruskal算法 最短路径问题 图的基本概念 图的定义&#xff1a; 图是由顶点的非空有穷集合与顶点之间关系&am…

antv g6实现系统拓扑图

1 背景 为例描述各个服务、redis、mysql等之间的联系及其健康状态&#xff0c;构建系统拓扑图&#xff0c;考虑 g6 更适合处理大量数据之间的关系&#xff0c;所以我们采用g6来绘制前端的图形。 g6提供的支持&#xff1a; 节点/边类型多样&#xff0c;同样支持自定义对于节点…

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(factoryMethod)

序言 前面文章介绍了在Spring中多种创建Bean实例的方式&#xff0c;包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor。 这篇文章继续介绍Spring中创建Bean的形式之一——factoryMethod。方法用的不多&#xff0c;感兴趣可以当扩展了解。…

【Git】--Part3--远程操作 配置 标签管理

1. 远程仓库 Git 是分布式版本控制系统&#xff0c;同⼀个 Git 仓库&#xff0c;可以分布到不同的机器上。怎么分布呢&#xff1f; 最早&#xff0c;肯定只有⼀台机器有⼀个原始版本库&#xff0c;此后&#xff0c;别的机器可以 “克隆” 这个原始版本库&#xff0c;⽽且每台机…