Java开发利器Commons Lang之元组

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

标准Java库没有提供足够的方法来操作其核心类,Apache Commons Lang提供了这些额外的方法。

Apache Commons Lang为java提供了大量的帮助工具。lang API,特别是String操作方法、基本数值方法、对象反射、并发、创建和序列化以及System属性。此外,它还包含对java.util.Date的基本增强,以及一系列专门用于帮助构建方法的实用工具,如hashCode、toString和equals。

-- 来自官方简介commons.apache.org/proper/comm…

什么是元组?

元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。 -- 摘自百度百科

如果从日常开发中我们可能经常遇到如下情形:我们写了某个方法,这个发放希望返回最大值和最小值两个值,这个时候怎么做呢?封装一个返回对象?或者返回一个json对象或者list,然后解析?这样确实有点难看!

那么好在Commons Lang给我们提供了一个tuple元组相关数据结构的实现,就可以帮助我们解决这种问题。

Commons Lang Tuple

tuple相关的类位于org.apache.commons.lang3.tuple下,整个元组从是否可变的维度上分为可变元组和不可变元组;从元组元素数量的维度上分为二元组和三元组;然后两两组和,那么总共就有2x2种元组:可变二元组、不可变二元组、可变三元组、不可变三元组

先来看下元组整个类图:

二元组

三元组

从类图上我们大致可以看到整个类之间的关系,所有二元组的基类是Pair,而Pair是继承自了Map.Entry;而三元组的基类是Triple。接下来进入实战环节。

可变二元组 MutablePair

@Test
public void testMutablePair() {
    MutablePair<String, Boolean> mutablePair = MutablePair.of("test1", true);
    System.out.println("左值:" + mutablePair.getLeft() + " 右值:" + mutablePair.getRight());

    mutablePair.setLeft("test2");
    mutablePair.setRight(false);
    System.out.println("左值:" + mutablePair.getLeft() + " 右值:" + mutablePair.getRight());

输出:
左值:test1 右值:true
左值:test2 右值:false
}
复制代码

不可变二元组 ImmutablePair

在不可变元组中,存储值的属性均被final修饰,因而不可变。

@Test
public void testImmutablePair() {
    ImmutablePair<String, Boolean> immutablePair = ImmutablePair.of("test1", true);
    System.out.println("左值:" + immutablePair.getLeft() + " 右值:" + immutablePair.getRight());
}

输出:
左值:test1 右值:true
复制代码

可变三元组

@Test
public void testMutableTriple() {
    MutableTriple<String, Boolean, Integer> mutableTriple = MutableTriple.of("test1", true, 1);
    System.out.println(
        "左值:" + mutableTriple.getLeft() + " 中间值:" + mutableTriple.getMiddle() + " 右值:" + mutableTriple.getRight());

    mutableTriple.setLeft("test2");
    mutableTriple.setMiddle(false);
    mutableTriple.setRight(2);
    System.out.println(
        "左值:" + mutableTriple.getLeft() + " 中间值:" + mutableTriple.getMiddle() + " 右值:" + mutableTriple.getRight());
}

输出:
左值:test1 中间值:true 右值:1
左值:test2 中间值:false 右值:2
复制代码

不可变三元组

不可变的原理同二元组,通过final修饰属性。

@Test
public void testImmutableTriple() {
    ImmutableTriple<String, Boolean, Integer> immutableTriple = ImmutableTriple.of("test1", true, 1);
    System.out.println(
        "左值:" + immutableTriple.getLeft() + " 中间值:" + immutableTriple.getMiddle() + " 右值:" + immutableTriple.getRight());
}

输出:
左值:test1 中间值:true 右值:1
复制代码

猜你喜欢

转载自juejin.im/post/7017276275655966727