Hutool 库中使用 Pair类返回键值对
目录一、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用于临时封装两个有关联的对象。它非常适合工具类、算法和中间计算过程但不适合作为复杂业务对象的长期替代品。

相关新闻

C/C++链接器如何处理同名函数冲突:静态库与动态库的符号决议机制

C/C++链接器如何处理同名函数冲突:静态库与动态库的符号决议机制

1. 项目概述:同名函数与链接库的“撞车”现场 在C/C开发中,尤其是构建大型项目或集成第三方库时,我们经常会遇到一个看似简单却暗藏玄机的问题:当链接器(Linker)试图将多个静态库(.a/.lib&#…

2026/10/20 15:07:01 阅读更多 →
UniApp小程序白屏问题全解析:从诊断到根治的实战指南

UniApp小程序白屏问题全解析:从诊断到根治的实战指南

1. 项目概述:当你的UniApp小程序突然“失明” 做UniApp微信小程序开发,最让人血压飙升的瞬间之一,莫过于本地调试一切正常,真机预览或上传体验版后,页面一片惨白,除了一个孤零零的导航栏或者TabBar&#x…

2026/10/20 23:06:00 阅读更多 →
Unity游戏开发:构建健壮存档系统的完整方案与避坑指南

Unity游戏开发:构建健壮存档系统的完整方案与避坑指南

1. 项目概述:为什么存档系统是游戏体验的基石在独立游戏开发圈子里,我见过太多因为存档系统没做好而“翻车”的案例。一个玩家辛辛苦苦打了几个小时,因为游戏崩溃或者误操作,进度一夜回到解放前,那种挫败感足以让他在S…

2026/10/20 17:42:46 阅读更多 →

最新新闻

Linux挂载NTFS报独占错误?排查链路与解决方案全解析

Linux挂载NTFS报独占错误?排查链路与解决方案全解析

1. 这个报错到底在说什么如果你在 Linux 或 macOS 上挂载一块 Windows 格式(NTFS)的移动硬盘,突然蹦出这么一行字:Mount is denied because the NTFS volume is already exclusively opened. The volume may be already mounted, …

2026/10/20 23:42:34 阅读更多 →
彻底搞懂反弹Shell:原理、常见姿势、流量检测与防御加固

彻底搞懂反弹Shell:原理、常见姿势、流量检测与防御加固

干网络安全这一行的人,早晚都会碰到一个词:反弹Shell。不管你是刚入行的新人,还是已经打过不少授权攻防演练的老手,这个名字几乎会出现在每一次渗透测试、应急响应甚至红蓝对抗里。简单讲,反弹Shell是一种让目标机器主…

2026/10/20 23:42:34 阅读更多 →
DellEMC定制版ESXi 6.7镜像安装与硬件配置实战指南

DellEMC定制版ESXi 6.7镜像安装与硬件配置实战指南

简介:VMware ESXi 6.7.0 Update 3 的 Dell EMC 定制版安装包,面向使用 Dell 服务器的虚拟化运维与管理员,解决在 Dell 硬件上部署或升级裸机虚拟化平台时的驱动兼容与稳定性问题。包内共 157 个文件,以 154 个 VIB 驱动与组件包为…

2026/10/20 23:42:34 阅读更多 →
从CSV到MP4:动态图表视频制作全流程解析

从CSV到MP4:动态图表视频制作全流程解析

做数据可视化项目久了,你会慢慢发现一个规律:真正折磨人的从来不是画图那一下,而是数据本身。CSV 文件看着简单,三五列数据,几万行记录,一旦进入图表环节,各种问题就全冒出来了。缺失值、重复记…

2026/10/20 23:42:34 阅读更多 →
核电设备管理:为什么必须先EAM后ERP

核电设备管理:为什么必须先EAM后ERP

简介:本资源是一份深度剖析核电行业信息化演进路径的行业实践报告,面向电力系统信息化建设者、EAM/ERP实施顾问、能源行业IT管理者及高校能源管理专业师生。文档以大亚湾核电站为全球首个核电EAM落地案例切入,系统阐述其“先EAM后ERP”的渐进…

2026/10/20 23:42:34 阅读更多 →
AF_XDP 实战指南:Ubuntu 24.04 上基于 eBPF 的高性能包处理

AF_XDP 实战指南:Ubuntu 24.04 上基于 eBPF 的高性能包处理

1. 项目概述:AF_XDP 到底解决什么问题碰上 AF_XDP 这个技术点的人,多半是已经在 Linux 上做高性能包处理,或者被 DPDK 的运维成本折腾过之后,想在内核生态里找个折中方案。AF_XDP 不是一个框架,而是 Linux 内核提供的地…

2026/10/20 23:41:33 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →