使用 Pair 和 Triple 高效解决多值返回问题
在日常开发中,我们经常需要让一个方法返回多个值,例如操作的结果和相关附加信息。传统方法通常需要创建自定义类或使用集合(如 Map
),但这些方式可能导致代码臃肿,调用方的理解和使用也会变得复杂。
借助 org.apache.commons.lang3.tuple
提供的 Pair
和 Triple
类及其子类,可以轻松实现多值返回,简化代码逻辑。本文将详细介绍如何利用它们解决多值返回问题。
引入依赖
首先,需要在项目中引入 Apache Commons Lang3
的 Maven 依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Pair 类介绍
Pair
是一个表示键值对的抽象类,用于组织和传递两个相关联的值。它的主要子类有:
- ImmutablePair:不可变,线程安全。
- MutablePair:可变,非线程安全。
使用 MutablePair
MutablePair
允许动态修改键和值,灵活性更高。以下是创建和使用 MutablePair
的方法:
创建 MutablePair
MutablePair<String, Integer> pair = MutablePair.of("userID", 25);
pair.setRight(30); // 修改右值
获取值
String left = pair.getLeft(); // 获取左值
Integer right = pair.getRight(); // 获取右值
示例代码
private static MutablePair<String, Integer> handleUserInfo(UserDO userDO) {
return MutablePair.of(userDO.getUserId(), userDO.getAge());
}
public static void main(String[] args) {
UserDO user = new UserDO("coderacademy", 35);
MutablePair<String, Integer> pair = handleUserInfo(user);
System.out.println(pair.getLeft() + " - Age before: " + pair.getRight());
pair.setRight(40);
System.out.println(pair.getLeft() + " - Age after: " + pair.getRight());
}
使用 ImmutablePair
ImmutablePair
是不可变的,适合需要线程安全的场景。其键和值在创建后无法更改。
创建 ImmutablePair
ImmutablePair<String, Integer> pair = ImmutablePair.of("userID", 25);
示例代码
private static ImmutablePair<String, Integer> handleUserInfo(UserDO userDO) {
return ImmutablePair.of(userDO.getUserId(), userDO.getAge());
}
public static void main(String[] args) {
UserDO user = new UserDO("coderacademy", 35);
ImmutablePair<String, Integer> pair = handleUserInfo(user);
System.out.println(pair.getLeft() + " - Age: " + pair.getRight());
// 无法修改值:pair.setRight(40); // 将导致编译错误
}
Triple 类介绍
Triple
是一个表示三元组的抽象类,用于组织和处理三个相关联的值。它的子类包括:
- ImmutableTriple:不可变,线程安全。
- MutableTriple:可变,非线程安全。
使用 MutableTriple
MutableTriple
提供动态修改值的方法,适合单线程场景。
示例代码
private static MutableTriple<String, Integer, UserDO> handleUserInfo(UserDO userDO) {
return MutableTriple.of(userDO.getUserId(), userDO.getAge(), userDO);
}
public static void main(String[] args) {
UserDO user = new UserDO("coderacademy", 35);
MutableTriple<String, Integer, UserDO> triple = handleUserInfo(user);
System.out.println("Before: " + triple.getMiddle());
triple.setMiddle(40);
System.out.println("After: " + triple.getMiddle());
}
使用 ImmutableTriple
ImmutableTriple
适合多线程场景,但需注意存储的对象如果是可变的,线程安全性无法保证。
示例代码
private static ImmutableTriple<String, Integer, UserDO> handleUserInfo(UserDO userDO) {
return ImmutableTriple.of(userDO.getUserId(), userDO.getAge(), userDO);
}
public static void main(String[] args) {
UserDO user = new UserDO("coderacademy", 35);
ImmutableTriple<String, Integer, UserDO> triple = handleUserInfo(user);
System.out.println("Before: " + triple.getMiddle());
// triple.setMiddle(40); // 编译错误,无法修改值
}
总结
使用 Pair
和 Triple
类可以显著提升代码效率和可读性。主要优点包括:
- 简化代码:无需创建额外的类。
- 提高可读性:清晰表达值的关系。
- 增强灵活性:根据需求选择可变或不可变实现。
- 提升开发效率:更少的样板代码。
这些工具适用于需要返回多个值的场景,是构建高效、清晰代码的绝佳选择。
评论区