根据中文名称首字母进行分组

news/2025/1/10 18:28:17/

很多项目中,需要用到中文名称到首字母进行分组,例如:城市、游戏等等。。。

java">/*** 将集合数据按照汉字首字母分组排序** @param list* @return*/public Map<String, Object> screenManufacturer(List<Game> list) {Set<String> hasAddedNameSet = new HashSet<>();long start = System.currentTimeMillis();try {// 输出26个字母Map<String, Object> map = new TreeMap<>();int n = 0;for (int i = 1; i < 27; i++) {String word = String.valueOf((char) (96 + i)).toUpperCase();// 循环找出 首字母一样的数据List<Game> letter = new ArrayList<>();for (Iterator<Game> iter = list.listIterator(); iter.hasNext(); ) {Game game = iter.next();if (hasAddedNameSet.contains(game.getName())) {continue;}String pybf = PinyinUtil.getFullSpell(game.getName());String firstWord = pybf.substring(0, 1);if (word.equalsIgnoreCase(firstWord)) {hasAddedNameSet.add(game.getName());letter.add(game);}n++;}map.put(word, letter);}log.info("总共循坏了{}次", n);long end = System.currentTimeMillis();log.info("总耗时:{}毫秒", end - start);return map;} catch (Exception e) {e.printStackTrace();}return null;}
java">import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;import java.text.Collator;
import java.util.*;public class PinyinUtil {public static void main(String[] args) {List<String> names = new ArrayList<>();names.add("张三");names.add("李四");names.add("王武");names.add("刘德华");names.add("精舍蓝军");Map<String, Object> stringObjectMap = screenManufacturer(names);System.out.println(stringObjectMap);}/*** 获取汉字串拼音,英文字符不变*/public static String getFullSpell(String chinese) {StringBuffer pybf = new StringBuffer();char[] arr = chinese.toCharArray();HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);for (int i = 0; i < arr.length; i++) {if (arr[i] > 128) {try {pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}} else {pybf.append(arr[i]);}}return pybf.toString();}/*** 将集合数据按照汉字首字母分组排序*/public static Map<String, Object> screenManufacturer(List<String> list) {try {Collator com = Collator.getInstance(Locale.CHINA);// 按字母排序Collections.sort(list, com);// 输出26个字母Map<String, Object> map = new TreeMap<>();for (int i = 1; i < 27; i++) {String word = String.valueOf((char) (96 + i)).toUpperCase();// 循环找出 首字母一样的数据List<String> letter = new ArrayList<>();for (String str : list) {String pybf = getFullSpell(str);String zm = pybf.substring(0, 1);if (word.equals(zm)) {letter.add(str);}}map.put(word, letter);}return map;} catch (Exception e) {e.printStackTrace();}return null;}}

POM文件

java">  <!--拼音--><dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>

生成的效果

java">{"code": 200,"message": "操作成功","data": {"A": [],"B": [],"C": [{"gameId": "g123","name": "CS"}],"D": [{"gameId": "g123","name": "地下城勇士"},{"gameId": "g123","name": "DNF"},{"gameId": "g123","name": "DOTA"}],"E": [],"F": [],"G": [],"H": [],"I": [],"J": [],"K": [],"L": [],"M": [{"gameId": "g123","name": "魔兽世界"}],"N": [],"O": [],"P": [],"Q": [],"R": [],"S": [{"gameId": "g123","name": "守卫剑阁"}],"T": [{"gameId": "7fbf48bb3204","name": "test22"}],"U": [],"V": [],"W": [{"gameId": "g123","name": "王者荣耀"}],"X": [],"Y": [],"Z": [{"gameId": "g123","name": "诛仙"}]}
}


http://www.ppmy.cn/news/1562036.html

相关文章

2025新春烟花代码(二)HTML5实现孔明灯和烟花效果

效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …

Appium版本升级,需要注意哪些点:使用UiAutomator2Options传递capabilities

mac上安装的是较新的Appium版本&#xff0c;在跑之前写的Android UI 自动化代码时报错&#xff1a;AttributeError: dict object has no attribute to_capabilities。 查了一下资料&#xff0c;这是因为较新的 Selenium 和 Appium 版本要求使用 Options 类来定义能力&#xff…

【hadoop学习遇见的小问题】clone克隆完之后网络连接不上问题解决

vi /etc/udev/rules.d/70-persistent-net.rules注释掉第一行 第二行的eth1 改为eth0 由上图也可以看到物理地址 记录下来在网卡中修改物理地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0修改完之后 重启reboot 即可

线性表的接口定义及使用

定义接口 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _001_线性表 {interface IListDS<T>//定义接口{int GetLength();void Clear();bool IsEmpty();void Add(T item);void Inser…

在离线环境中安装 `.rpm` 包的步骤

在一些环境中&#xff0c;可能无法直接通过网络安装软件包。特别是在没有互联网连接的情况下&#xff0c;我们仍然可以手动下载 .rpm 安装包并进行离线安装。本文将介绍如何在离线环境中安装多个 .rpm 包&#xff0c;确保软件的顺利安装和依赖关系的处理。 1. 将 .rpm 文件复制…

macOS 如何修改 PATH 环境变量 ?

对于希望从终端管理命令行工具和脚本的可访问性的用户来说&#xff0c;在 macOS 上编辑 PATH 环境变量是必不可少的。在最近的版本中&#xff0c;macOS 已经从使用 bash shell 作为默认 shell 转变为使用 zsh&#xff0c;因此了解如何在这两个 shell 中编辑 PATH 是很重要的。 …

RabbitMQ-SpringAMQP使用介绍

RabbitMQ 1. Spring AMQP1.1 引入依赖1.2 消息发送1.3 消息接收1.4 WorkQueue模型1.4.1 实例代码1.4.2 能者多劳1.4.3 总结 1.5交换机1.6 Fanout交换机&#xff08;广播&#xff09;1.7 Direct交换机&#xff08;订阅&#xff09;1.8 Topic交换机&#xff08;通配符订阅&#x…

webrtc之rtc::ArrayView<const uint8_t>

rtc::ArrayView<const uint8_t> 是 WebRTC&#xff08;或其他基于 rtc 命名空间的库&#xff09;中常见的一个类型&#xff0c;它通常用于表示一块 只读的内存区域&#xff0c;该内存区域由一系列 uint8_t 类型&#xff08;无符号 8 位整数&#xff09;元素组成。 1. rt…