新用户注册入口 老用户登录入口

[转载]Java元组Tuple

文章作者:转载 更新时间:2023-09-17 17:43:51 阅读数量:256
文章标签:Java数据结构多种数据类型依赖Jar包Triplet关系数据库
本文摘要:Java中的元组(Tuple)作为一种可存储多种数据类型元素的数据结构,弥补了List集合的局限性。通过引入`org.javatuples:javatuples:1.2`依赖库,开发者可以利用预定义的一元至十元组类,如Triplet,实现灵活的数据组合。为了简化元组对象的创建和记忆,文中建议自定义工具类TupleUtils,根据传入参数数量动态返回相应元组实例。在示例中,Triplet被用于封装实体类字节码文件、数据库表主键及字段名称等多元信息,展示了Java元组在处理复杂数据关系时的优势与便捷性。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/qq_35006663/article/details/100301416。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

Java中的元组Tuple

文章目录

    • Java中的元组Tuple
      • 1. 概念
      • 2. 使用
        • 2.1 依赖Jar包
        • 2.2 基本使用
          • 2.2.1 直接调用
          • 2.2.2 自定义工具类
          • 2.2.3 示例代码

1. 概念

  Java中的Tuple是一种数据结构,可存放多个元素,每个元素的数据类型可不同。Tuple与List集合类似,但是不同的是,List集合只能存储一种数据类型,而Tuple可存储多种数据类型
  可能你会说,Object类型的List实际也是可以存储多种类型的啊?但是在创建List的时候,需要指定元素数据类型,也就是只能指定为Object类型,获取的元素类型就是Object,如有需要则要进行强转。而Tuple在创建的时候,则可以直接指定多个元素数据类型。

  Tuple具体是怎么的数据结构呢?

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

  以上是百度百科中的"元组"概念,我们将一个元组理解为数据表中的一行,而一行中每个字段的类型是可以不同的。这样我们就可以简单理解Java中的Tuple数据结构了。

2. 使用

2.1 依赖Jar包

Maven坐标如下:

<dependency><groupId>org.javatuples</groupId><artifactId>javatuples</artifactId><version>1.2</version>
</dependency>

引入相关依赖后,可以看出jar包中的结构很简单,其中的类主要是tuple基础类、扩展的一元组、二元组…十元组,以及键值对元组;接口的作用是提供【获取创建各元组时传入参数值】的方法。
Java Tuples

2.2 基本使用

2.2.1 直接调用

以下以三元组为例,部分源码如下:

package org.javatuples;import java.util.Collection;
import java.util.Iterator;import org.javatuples.valueintf.IValue0;
import org.javatuples.valueintf.IValue1;
import org.javatuples.valueintf.IValue2;/*** <p>* A tuple of three elements.* </p> * * @since 1.0* * @author Daniel Fern&aacute;ndez**/
public final class Triplet<A,B,C> extends Tupleimplements IValue0<A>,IValue1<B>,IValue2<C> {private static final long serialVersionUID = -1877265551599483740L;private static final int SIZE = 3;private final A val0;private final B val1;private final C val2;public static <A,B,C> Triplet<A,B,C> with(final A value0, final B value1, final C value2) {return new Triplet<A,B,C>(value0,value1,value2);}

  我们一般调用静态方法with,传入元组数据,创建一个元组。当然了,也可以通过有参构造、数组Array、集合Collection、迭代器Iterator来创建一个元组,直接调用相应方法即可。
  但是,我们可能记不住各元组对象的名称(Unit、Pair、Triplet、Quartet、Quintet、Sextet、Septet、Octet、Ennead、Decade),还要背下单词…因此,我们可以自定义一个工具类,提供公共方法,根据传入的参数个数,返回不同的元组对象。

2.2.2 自定义工具类
package com.superchen.demo.utils;import org.javatuples.Decade;
import org.javatuples.Ennead;
import org.javatuples.Octet;
import org.javatuples.Pair;
import org.javatuples.Quartet;
import org.javatuples.Quintet;
import org.javatuples.Septet;
import org.javatuples.Sextet;
import org.javatuples.Triplet;
import org.javatuples.Unit;/*** ClassName: TupleUtils* Function:* <p>* Tuple helper to create numerous items of tuple. the maximum is 10.* if you want to create tuple which elements count  more than 10, a new class would be a better choice.* if you don't want to new a class, just extends the class {@link org.javatuples.Tuple} and do your own implemention.* </p>* date: 2019/9/2 16:16** @version 1.0.0* @author Chavaer* @since JDK 1.8*/
public class TupleUtils{/*** <p>Create a tuple of one element.</p>** @param value0* @param <A>** @return a tuple of one element*/public static <A> Unit<A> with(final A value0) {return Unit.with(value0);}/*** <p>Create a tuple of two elements.</p>** @param value0* @param value1* @param <A>* @param <B>** @return a tuple of two elements*/public static <A, B> Pair<A, B> with(final A value0, final B value1) {return Pair.with(value0, value1);}/*** <p>Create a tuple of three elements.</p>** @param value0* @param value1* @param value2* @param <A>* @param <B>* @param <C>** @return a tuple of three elements*/public static <A, B, C> Triplet<A, B, C> with(final A value0, final B value1, final C value2) {return Triplet.with(value0, value1, value2);} }

以上的TupleUtils中提供了with的重载方法,调用时根据传入的参数值个数,返回对应的元组对象。

2.2.3 示例代码

若有需求:
  现有pojo类Student、Teacher、Programmer,需要存储pojo类的字节码文件、对应数据库表的主键名称、对应数据库表的毕业院校字段名称,传到后层用于组装sql。
  可以再定义一个对象类,但是如果还要再添加条件字段的话,又得重新定义…所以我们这里直接使用元组Tuple实现。

public class TupleTest {public static void main(String[] args) {List<Triplet<Class, String, String>> roleList = new ArrayList<Triplet<Class, String, String>>();/*三元组,存储数据:对应实体类字节码文件、数据表主键名称、数据表毕业院校字段名称*/Triplet<Class, String, String> studentTriplet = TupleUtils.with(Student.class, "sid", "graduate");Triplet<Class, String, String> teacherTriplet = TupleUtils.with(Teacher.class, "tid", "graduate");Triplet<Class, String, String> programmerTriplet = TupleUtils.with(Programmer.class, "id", "graduate");roleList.add(studentTriplet);roleList.add(teacherTriplet);roleList.add(programmerTriplet);for (Triplet<Class, String, String> triplet : roleList) {System.out.println(triplet);} }
}

存储数据结构如下:
Tuple示例代码

本篇文章为转载内容。原文链接:https://blog.csdn.net/qq_35006663/article/details/100301416。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
元组 (Tuple)在Java编程语言中,元组是一种数据结构,用于存储多个元素,且每个元素可以有不同的数据类型。不同于List集合只能存放同一种类型的元素,元组允许在同一结构内组合多种不同类型的数据。在Java中通过引入第三方库如javatuples实现,预定义了从一元组到十元组的类,如Triplet表示包含三个元素的元组,使得开发者能够方便地创建和操作多类型的数据组合。
Maven坐标在Maven项目管理工具中,Maven坐标是用来唯一标识一个依赖项(通常是Java库)的标准格式。它包括groupId、artifactId、version等字段,例如“org.javatuples:javatuples:1.2”。在文章中,Maven坐标用来指导开发者如何在项目中添加对Java元组库(javatuples)的依赖,以便于在代码中使用元组功能。
关系数据库关系数据库是一种基于关系模型的数据库管理系统,其中的数据以表格的形式组织,并通过键(Key)之间的关联形成数据间的联系。在本文中提到,元组的概念来源于关系数据库中的基本概念,即表中的每一行记录可视为一个元组,而每列则是一个属性。在Java元组的应用场景举例中,通过元组将实体类与数据库表的相关信息进行映射,体现了元组在处理与数据库交互时的优势。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在了解了Java中的元组Tuple概念及其应用后,我们可以进一步探究其在现代软件开发中的实际应用场景和未来发展趋势。近年来,随着函数式编程范式的普及以及Java 8及以上版本对Lambda表达式和Stream API的支持,元组的使用变得更加广泛。例如,在响应式编程中,处理异步数据流时,元组可以方便地封装多种类型的数据结果,提高代码的可读性和简洁性。
同时,随着领域驱动设计(Domain-Driven Design, DDD)的兴起,元组在实现值对象(Value Object)和聚合根(Aggregate Root)等模式时也扮演着重要角色。在处理复杂业务逻辑、简化领域模型及数据库交互时,通过元组将多个相关属性作为一个整体进行操作,既保持了数据一致性,又降低了耦合度。
此外,Apache Spark等大数据处理框架也广泛应用了元组的概念,以高效地表示和处理多维数据。在处理大规模数据分析任务时,用户可以通过创建不同类型的元组来表达复杂的键值对或更丰富的数据结构,从而更好地适应多样化的大数据场景。
在未来,随着JDK的发展和社区对数据结构需求的深入挖掘,元组类库可能会进一步丰富和完善,提供更为灵活且高性能的API,使得开发者能够更加自如地在各类项目中运用元组这一强大的工具,解决更多类型安全和数据组合的问题。而随着Java模块化系统(JPMS)的成熟,对于元组库的依赖管理也将更加便捷,有助于推动其在更多实际项目中的落地应用。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
umount /mnt - 卸载已挂载的目录。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
基于Redis的分布式锁互斥性与可靠性实现及命名空间与原子性保障 04-22 可自定义刻度动画的jQuery进度条插件 02-07 jQuery和css3网站操作提示向导插件 12-28 jQuery创意响应式两栏滚动幻灯片特效 11-30 带视频播放的全屏轮播图布局特效 09-07 黑色炫酷个人摄影师网站通用模板下载 01-20 Cassandra中哈希分区与范围分区策略:数据分布、Murmur3Partitioner与负载均衡实践 11-17 [转载]java培训后好找工作吗 11-13 响应式环保包装盒设计公司网站静态模板 11-04 本次刷新还10个文章未展示,点击 更多查看。
中文建筑工程公司静态html网站模板下载 07-03 红色大气高端特色餐厅加盟网站模板 06-21 Vue.js 中的数据绑定与取消绑定:事件监听器、$destroy() 方法及 v-model 指令的运用与虚拟DOM、组件销毁的关系解析 06-20 响应式游戏应用商店单页网站html模板 06-15 自考大学通用模板下载 06-13 jqtimeline.js-简单又好用的jquery时间轴插件 06-04 [转载]Java Work 05-26 红色简洁电影售票平台网站html模板 05-02 投资集团项目展示页面网站HTML5模板 03-22 soulmate粉色干净浪漫唯美婚礼单页响应式网站模板 03-07 页面滚动时动态为元素添加class的jQuery插件 03-05
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"