Hutool 库中使用 Pair类返回键值对
📅 2026/7/30 4:41:14
👁️ 次浏览
目录一、Pair 是什么二、最简单的例子三、它有什么作用四、为什么叫 Pair一对五、和 Map 有什么区别PairMap六、实际开发中的使用场景场景1返回两个值场景2遍历时临时保存两个对象场景3方法之间传递两个关联数据场景4排序七、Pair 不是 Map.Entry八、Hutool Pair 提供的方法九、与 MutablePair 的区别十、在实际项目中是否推荐使用一、Pair 是什么PairK, V是 Hutool库 提供的一个通用键值对Key-Value对象它的作用就是把两个相关的数据临时封装到一个对象中避免为了返回两个值而专门创建一个 Java Bean。它位于cn.hutool.core.lang.Pair它内部实际上非常简单只包含两个字段key和value。创建后就是一个不可变Immutable的键值对不能修改 key/value只能读取。(Hutool Plus)二、最简单的例子例如PairString,IntegerpairPair.of(Tom,18);System.out.println(pair.getKey());System.out.println(pair.getValue());输出Tom 18也可以直接 newPairString,IntegerpairnewPair(Tom,18);不过官方更推荐Pair.of(key,value)因为类型推导更方便。(Hutool Plus)三、它有什么作用很多时候一个方法想返回两个值。例如假设我们有一个方法需要返回用户ID用户姓名如果没有 Pair你只能方案一创建对象classUserInfo{privateLongid;privateStringname;}然后returnnewUserInfo(id,name);如果这个对象以后再也不用就会觉得比较麻烦。于是 Pair 就可以这样publicPairLong,StringgetUser(){returnPair.of(1001L,张三);}调用PairLong,StringusergetUser();Longiduser.getKey();Stringnameuser.getValue();四、为什么叫 Pair一对因为它就是(key,value)例如(Tom,18) (Apple,8.5) (北京,2150) (手机号,181****8888)就是一对数据。五、和 Map 有什么区别很多初学者都会疑惑Map 也是 Key - Value为什么还要 Pair区别非常大。Pair只表示一个 Key 一个 Value例如(Tom,18)只有这一组。MapMap 保存的是很多 Pair例如Tom - 18 Jack - 20 Lucy - 22实际上可以理解成Map │ ├── Pair(Tom,18) ├── Pair(Jack,20) ├── Pair(Lucy,22)所以Pair 表示一条数据而 Map 表示很多条 Pair。六、实际开发中的使用场景场景1返回两个值例如查询数据库需要返回成功数量失败数量publicPairInteger,Integercount(){returnPair.of(120,5);}调用PairInteger,Integerresultcount();System.out.println(result.getKey());//120System.out.println(result.getValue());//5场景2遍历时临时保存两个对象例如订单订单号 订单金额可以写PairString,BigDecimalorderPair.of(NO10001,newBigDecimal(99.8));场景3方法之间传递两个关联数据例如登录成功后需要返回token user可以PairString,Userlogin(){returnPair.of(token,user);}场景4排序例如统计词频apple - 10 banana - 6 cat - 9可以转成ListPairString,Integer然后根据 value 排序。七、Pair 不是 Map.Entry很多人第一次看会误认为Pair Map.Entry其实不是。例如MapString,IntegermapnewHashMap();遍历for(Map.EntryString,Integerentry:map.entrySet()){}这里得到的是Map.Entry不是Pair虽然Map.Entry Pair都表示key value但是它们属于两个不同的类。八、Hutool Pair 提供的方法常用方法非常少Pair.of(key,value)创建对象。getKey()获取 Key。getValue()获取 Value。equals()判断两个 Pair 是否相同。例如Pair.of(A,1)和Pair.of(A,1)相等。hashCode()用于 HashMap、HashSet 等集合。toString()打印字符串。九、与 MutablePair 的区别Hutool 还有一个MutablePair顾名思义Mutable 可修改例如MutablePairString,IntegerpairnewMutablePair(Tom,18);pair.setKey(Jack);pair.setValue(20);而普通Pair创建以后PairString,IntegerpairPair.of(Tom,18);只能pair.getKey();pair.getValue();不能修改内部的值因此更安全。(Hutool Plus)十、在实际项目中是否推荐使用推荐使用Pair的场景✔ 方法临时返回两个值✔ Stream 流处理中临时组合两个对象✔ 排序、中间计算过程中的数据封装✔ 工具类内部使用不推荐使用的场景❌ Controller 返回值接口响应应该使用明确的 DTO❌ Service 对外接口长期暴露返回UserInfoDTO等语义明确的对象更好❌ 数据库实体Entity❌ 业务对象VO、DTO、BO例如// ✔ 合适PairBigDecimal,BigDecimalcalculateTax();// ❌ 不推荐PairString,ObjectqueryUser();第二种代码可读性很差别人很难知道key到底代表什么是用户ID用户名手机号还是Token如果改成UserInfoDTO就一目了然。总结一句话PairK, V本质上就是一个轻量级的二元组Tuple用于临时封装两个有关联的对象。它非常适合工具类、算法和中间计算过程但不适合作为复杂业务对象的长期替代品。
1. 项目概述与核心价值最近在整理数据分析项目时,发现招聘市场数据是个非常有意思的观察窗口,尤其是像腾讯这样的大厂,其招聘需求的变化往往能反映出技术栈的演进和行业的动向。直接去官网一页页翻看效率太低,而且很难做横向对比和…
📅 2026/7/30 4:41:14
1. 项目概述:为什么存档系统是游戏体验的基石在独立游戏开发圈子里,我见过太多因为存档系统没做好而“翻车”的案例。一个玩家辛辛苦苦打了几个小时,因为游戏崩溃或者误操作,进度一夜回到解放前,那种挫败感足以让他在S…
📅 2026/7/30 4:40:14
1. 项目概述:从零认识ROS2的核心基石如果你刚接触机器人开发,听到ROS2这个词可能会觉得它庞大又复杂。但别担心,任何复杂的系统都有其最基础的构建单元。今天我们不谈那些高深的导航算法或复杂的感知模型,就聊聊ROS2里最核心、最根…
📅 2026/7/30 4:40:14
如何用go2rtc实现零延迟摄像头流媒体:3种安装方式与实战配置指南 【免费下载链接】go2rtc Ultimate camera streaming application 项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
go2rtc是一款功能强大的开源流媒体服务器,能够将任何…
📅 2026/7/30 13:26:14
南京家电维修首选欧米到家,服务覆盖玄武区、秦淮区、建邺区、鼓楼区、浦口区、栖霞区、雨花台区、江宁区、六合区、溧水区、高淳区全域片区。所有维修师傅均持证上岗,拥有 5-10 年一线维修经验。主营:空调、冰箱、洗衣机、热水器、燃气灶、壁…
📅 2026/7/30 13:26:14
1. 项目概述与核心价值 聊到用Visual C写一个类似QQ的聊天工具,很多老C程序员可能会心一笑,这几乎是十几年前Windows桌面开发入门的“毕业设计”级项目。今天再翻出这样的源码来详解,意义远不止于怀旧。在Web、移动App大行其道的今天…
📅 2026/7/30 13:26:14
一步一步学习使用FireMonkey动画:使用动画组件为窗体添加动态效果
引言:为什么需要动画?在现代应用程序开发中,用户界面(UI)的流畅性和互动性已经成为衡量应用质量的关键指标之一。静态的窗体往往显得生硬&…
📅 2026/7/30 13:26:14
这次我们来看一个基于 Dify 的文章理解助手搭建方案。Dify 是一个开源的 LLM 应用开发平台,能快速构建基于大语言模型的智能应用。如果你需要处理大量文档、构建知识库问答系统,或者想让 AI 帮你理解长篇文章的核心内容,这个方案值得一试。最…
📅 2026/7/30 13:26:13
基础代码结构db->create 初始化建表语句db->mapping.entity 查询sqlimpl 业务逻辑工作流部分org.flowable:flowable-task-service包-
ACT_HI_TASKINSTACT_HI_TSK_LOGACT_RU_TASKorg.flowable:flowable-engine包ACT_RE_DEPLOYMENTACT_RE_MODELACT_RU_EXECUTIONACT_RE_PROC…
📅 2026/7/30 13:25:13
本文关键词:geo2是共价化合物哎,说实话,每次看到化学题里那些弯弯绕绕的电子式,我就头大。特别是遇到那种非要让你判断是离子还是共价的,心里就发毛。今天咱不整那些虚头巴脑的定义,就聊聊二氧化硅,也就是大家常说的硅石、石英,很多人会误写成geo2,虽然化学式不对,但…
📅 2026/7/30 0:00:24
B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…
📅 2026/7/30 0:00:26
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer
您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…
📅 2026/7/30 0:00:26
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/30 1:16:07
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/30 1:16:07
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/30 1:16:07
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/30 7:16:27
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/29 17:15:46
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/30 5:16:22