目 录CONTENT

文章目录

使用 Pair 和 Triple 高效解决多值返回问题

在等晚風吹
2024-11-22 / 0 评论 / 0 点赞 / 10 阅读 / 0 字 / 正在检测是否收录...

使用 Pair 和 Triple 高效解决多值返回问题

在日常开发中,我们经常需要让一个方法返回多个值,例如操作的结果和相关附加信息。传统方法通常需要创建自定义类或使用集合(如 Map),但这些方式可能导致代码臃肿,调用方的理解和使用也会变得复杂。

借助 org.apache.commons.lang3.tuple 提供的 PairTriple 类及其子类,可以轻松实现多值返回,简化代码逻辑。本文将详细介绍如何利用它们解决多值返回问题。


引入依赖

首先,需要在项目中引入 Apache Commons Lang3 的 Maven 依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

Pair 类介绍

Pair 是一个表示键值对的抽象类,用于组织和传递两个相关联的值。它的主要子类有:

  1. ImmutablePair:不可变,线程安全。
  2. 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 是一个表示三元组的抽象类,用于组织和处理三个相关联的值。它的子类包括:

  1. ImmutableTriple:不可变,线程安全。
  2. 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); // 编译错误,无法修改值
}

总结

使用 PairTriple 类可以显著提升代码效率和可读性。主要优点包括:

  • 简化代码:无需创建额外的类。
  • 提高可读性:清晰表达值的关系。
  • 增强灵活性:根据需求选择可变或不可变实现。
  • 提升开发效率:更少的样板代码。

这些工具适用于需要返回多个值的场景,是构建高效、清晰代码的绝佳选择。

0

评论区