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