首页 > 编程语言 >Java开发利器Commons Lang之元组Tuple

Java开发利器Commons Lang之元组Tuple

时间:2024-05-11 14:22:24浏览次数:14  
标签:Lang test1 Java 右值 Tuple 左值 元组 mutableTriple true

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

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

-- 来自官方简介http://commons.apache.org/proper/commons-lang/index.html

什么是元组?

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

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

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

 

为什么使用元组tuple?

        元组和列表list一样,都可能用于数据存储,包含多个数据;但是和列表不同的是:列表只能存储相同的数据类型,而元组不一样,它可以存储不同的数据类型,比如同时存储int、string、list等,并且可以根据需求无限扩展。
        比如说在web应用中,经常会遇到一个问题就是数据分页问题,查询分页需要包含几点信息:当前页数、页大小;查询结果返回数据为:当前页的数据记录,但是如果需要在前台显示当前页、页大小、总页数等信息的时候,就必须有另外一个信息就是:数据记录总数,然后根据上面的信息进行计算得到总页数等信息。这个时候查询某一页信息的时候需要返回两个数据类型,一个是list(当前也的数据记录),一个是int(记录总数)。当然,完全可以在两个方法、两次数据库连接中得到这两个值。事实上在查询list的时候,已经通过sql查询得到总计录数,如果再开一个方法,再做一次数据库连接来查询总计录数,不免有点多此一举、浪费时间、浪费代码、浪费生命。言重了~在这种情况下,我们就可以利用二元组,在一次数据库连接中,得到总计录数、当前页记录,并存储到其中,简单明了!

 

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
 

https://www.jianshu.com/p/dcedc7765eb8

 

标签:Lang,test1,Java,右值,Tuple,左值,元组,mutableTriple,true
From: https://www.cnblogs.com/softidea/p/18186406

相关文章

  • [附源码+文档]Java Swing小游戏源码合集(14款)_毕业设计必选项目
    (小众游戏塔防迷宫动作剧情类等)16款游戏源码Javaswing五子棋联网版源代码Javaswing贪吃蛇游戏开发教程+源码Javaswing超级玛丽游戏Javaswing俄罗斯方块项目源码Javaswing飞机大战游戏源码Javaswing雷电游戏源码Javaswing连连看游戏源码Javaswing模拟写字板源码......
  • Java异常处理的最佳实践
      本文是关于Exception处理的一篇不错的文章,从JavaException的概念介绍起,依次讲解了Exception的类型(Checked/Unchecked),Exception处理的最佳实现:选择Checked还是Unchecked的几个经典依据Exception的封装问题如无必要不要创建自己的Exception不要用Excepti......
  • langchain教程
    参考网址:https://python.langchain.com/docs/get_started/introduction/https://python.langchain.com/docs/modules/1、简介LangChain是一个用于开发由大型语言模型(LLM)驱动的应用程序的框架。LangChain简化了LLM申请生命周期的每个阶段:开发:使用LangChain的LCLE和......
  • Java拦截器(Interceptor)详细解析
    转载链接地址:https://www.cnblogs.com/xiaoyh/p/16444681.html一、拦截器概念讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器(2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源(3)如果是静态资源,会直接到Tomcat......
  • 基于spring boot Java的数组转树状结构类
    基于springboot的数组转树状结构类importjava.lang.reflect.Method;importjava.util.ArrayList;importjava.util.List;importjava.util.function.Function;publicclassArray{private<E,V>VcreateViewObject(Eentity,Class<V>viewObjectClass)thro......
  • java常用加密手段
    虽然一般都会给APK上壳。但是拖壳还是要分析JAVa链接:https://pan.baidu.com/s/1Qm0cF0u7RCGy174QYeVf2Q?pwd=c60g提取码:c60g1.隐藏字节-将明文字符串->转为字节定义publicstaticvoidmain(String[]args)throwsIOException{Stringstrq=newString(newbyte[]{97,......
  • 第一个JAVA代码
    第一个JAVA代码创建存放代码的文件夹在合适的路径中新建存放代码的文件夹。新建一个Java文件1.新建一个文件2.文件名为HelloWorld3.将后缀改为.java输入代码使用notepad++打开新建的文件,输入以下代码并保存publicclassHelloWorld{ publicstaticvoidmain(String[]a......
  • Java面试题:Spring Bean线程安全?别担心,只要你不写并发代码就好了!
    Spring中的Bean是否线程安全取决于Bean的作用域(scope)。Spring提供了几种不同的Scope,其中包括Singleton、Prototype、Request、Session、GlobalSession等。 SingletonScope(单例模式)默认情况下,SpringBean是SingletonScope,这意味着在整个应用程序上下文中只有一个实例。......
  • JAVA下载安装配置基础
    JAVA下载安装配置基础JDK、JRE、JVMJDK:JavaDevelopmentKitJava开发者工具,他包含JRE和JVMJRE:JavaRuntimeEnvironmentJava运行时环境包含JVMJVM:JAVAVirtualMachineJave虚拟机下载配置JDK搜索下载JDK8(目前使用率较高的版本)安装JDK记住安装的路径进入高......
  • 【MySQL】求和查询,目标值int,但空数据时返回null的问题(Java)
    问题分析intselectDeviceMonthRepairCount(StringdeviceType,Stringmonth);<selectid="selectDeviceMonthRepairCount"resultType="int">SELECTSUM(repair_count)FROMwarranty_recordsWHEREdevice_type=......