当前位置: 首页 > news >正文

编写TreeMap自定义排序的插曲

上周有个需求,内容是将从数据库中查出的数据进行排序,作为导出Excel的sheet名进行输出,分析数据发现,返回值是List<Map<String,Object>>,项目中的代码是现将List中的数据选择性放存放到TreeMap<String,String>中,使用TreeMap中的特性做到有序输出;但是原开发者没有意识到如下情况:当查询条件为A时,查询的数据是Number(4,0);当查询条件为B时,查询的数据是varchar(255)。这样就出现原来1,2,3,11的顺序输出后变成了"1","12","2","3"。

最终代码如下:

 public static TreeMap<String, String> createTreeMap() {Comparator<String> comparator = new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {try {Integer i1 = Integer.parseInt(o1);Integer i2 = Integer.parseInt(o2);return i1.compareTo(i2);} catch (Exception e) {int length = o1.length() - o2.length();return length !=0 ? length :o1.compareTo(o2);}}};return new TreeMap<String, String>(comparator);}

在这次编写代码过程中,出现了一个问题,本来在catch后直接return -1,结果再取出值的时候出现了问题:

 public static TreeMap<String, String> createTreeMap() {Comparator<String> comparator = new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {try {Integer i1 = Integer.parseInt(o1);Integer i2 = Integer.parseInt(o2);return i1.compareTo(i2);} catch (Exception e) {return -1;}}};return new TreeMap<String, String>(comparator);
}public static void main(String[] args) {List<Map<String,Object>> list = new ArrayList<>();TreeMap<String, String> treeMap = createTreeMap();treeMap.put("1a", "1");treeMap.put("11b", "11");treeMap.put("12c", "12");treeMap.put("21d", "21");treeMap.put("2e", "2");treeMap.put("3f", "3");treeMap.put("4g", "4");System.out.println(treeMap);for (String s : treeMap.keySet()) {System.out.println(s+"&&"+ treeMap.get(s));}}

当时特别的郁闷,为什么打印map值的时候,看起来是正常,但是在取值的时候发现key是有值的,但是value全部都是null,超级郁闷呀!

使用AI分析后得出的结论是这样的:

所以写代码不能想当然(查询时候SQL中都已经去重,所以理所当然认为返回-1就没问题了),一定要考虑周全,在满足自定义的逻辑时也要不影响其他的逻辑,不然就会耽误交付时间。

http://www.xdnf.cn/news/1383913.html

相关文章:

  • InstructGPT:使用人类反馈训练语言模型以遵循指令
  • 文本处理与模型对比:BERT, Prompt, Regex, TF-IDF
  • 在angular20中使用monaco-editor
  • 任天堂NDS中文游戏ROM精选毕业整合包整理分享! +NDS模拟器
  • Maven 编译打包一个比较有趣的问题
  • 机器视觉学习-day08-图像缩放
  • 企业如何管理跨多个系统的主数据?
  • Maven核心用法
  • 3446. 按对角线进行矩阵排序
  • [数组]27.移除元素
  • Kafka02-集群选主
  • 【Node.js从 0 到 1:入门实战与项目驱动】2.4 开发工具推荐(VS Code 、IDEA及插件、终端工具、调试工具)
  • 配置 Gitlab 和 Elasticsearch/Zoekt 并使用 Docker Metadata 数据库、Camo 代理服务
  • AI 如何 “看见” 世界?计算机视觉(CV)的核心技术:图像识别、目标检测与语义分割
  • Day16_【机器学习常见术语】
  • 宋红康 JVM 笔记 Day08|堆
  • MySQL 中 tinyint(1)、int(11)、bigint(20) 的数字到底是什么意思?
  • Vibe Coding 概念提出者 AndrejKarpathy 谈强化学习。
  • 在jdk8的spring-boot-2.7.x项目中集成logback-1.3.x
  • 通过代码认识 CNN:用 PyTorch 实现卷积神经网络识别手写数字
  • Maven 项目单元测试实战指南:从环境搭建到问题排查全解析
  • 使用astah制作专业状态图及C/C++实现解析
  • Docker 详解+示例
  • 进程组 会话 作业控制 守护进程
  • 【Canvas与盾牌】“靡不有初,鲜克有终”黄竖条盾牌
  • Redis 哨兵(Sentinel)全面解析
  • 海康相机开发---设备登录
  • Subdev与Media子系统的数据结构
  • redis单哨兵模式
  • 把 AI 塞进「智能水杯」——基于声学指纹的零样本水质检测杯