Java元组Tuple的使用

news2024/11/15 15:56:51

WHY?

通常情况下,一个方法返回值是一个,类型固定(当然你要封装成对象就另一说了)。如果想要在一个方法中返回多个类型不同的值(不要封装成对象)?这个时候就可以使用元组。典型的需求场景处理数据分页问题时。‌例如,‌在Web应用中,‌当需要查询分页数据时,‌通常需要返回当前页的数据记录(‌通常是一个列表)‌和总记录数(‌一个整数)‌。‌通过在一次数据库查询中同时获取这两个值,‌可以避免进行额外的数据库连接,‌从而提高效率。‌

WHAT?

Tuple通过泛型实现,‌允许存储不同数据类型的元素,‌并且这些元素的值之间没有关联。

元组和列表list区别:

二者都可能用于数据存储,包含多个数据

元组和列表不同的是:列表只能存储相同的数据类型;而元组可以存储不同的数据类型,比如同时存储Integer、String、List、Map、Object等,并且可以根据需求无限扩展。

总结一下:

① 元组不同于List,List存储相同的数据类型,虽然也可以存储不同的数据类型,那就不符合泛型了

② 元组不同于数组,数组种存储的相同的数据类型

③ 元组不同于Map,Map是Key-Value,而元组中的值与值之间没有关系

④ 元组的值可以是不同数据类型,值与值之间没有关系

 DO?

方式1:三方类库

引入依赖jar包

<dependency>
     <groupId>com.github.phantomthief</groupId>
     <artifactId>more-lambdas</artifactId>
     <version>0.1.55</version>
</dependency>

示例:

public static void main(String[] args) {

   ThreeTuple<String, Integer, Integer> threeTuple = Tuple.tuple("123", 1, 2);

   List<String> list = Arrays.asList("这是第1个字符串", "这是第2个字符串", "这是第3个字符串");
   TwoTuple<List<String>, Integer> twoTuple1 = Tuple.tuple(list, list.size());

   List<String> first = twoTuple1.first;
   Integer second = twoTuple1.second;

   System.out.println(first);
   System.out.println(second);
}
方式2:自定义元组

这种方式和定义对象一样,只不过需要使用泛型来保证接受各类数据。

二元组类

public class TwoTuple<A, B> {

    public final A first;
    public final B second;

    public TwoTuple(final A a, final B b) {
        this.first = a;
        this.second = b;
    }

    public A getFirst() {
        return first;
    }

    public B getSecond() {
        return second;
    }
}

 三元组类

public class ThreeTuple<A, B, C> extends TwoTuple<A, B> {

    public final C third;

    public ThreeTuple(A a, B b, C c) {
        super(a, b);
        this.third = c;
    }

    public C getThird() {
        return third;
    }
}

 工具类:

public class TupleUtil {

    public static <A, B> TwoTuple<A, B> tuple(final A a, final B b) {
        return new TwoTuple<A, B>(a, b);
    }

    public static <A, B, C> ThreeTuple<A, B, C> tuple(final A a, final B b, final C c) {
        return new ThreeTuple<A, B, C>(a, b, c);
    }


}

Demo方法

public static void main(String[] args) {

   ThreeTuple<String, Double, Integer> threeTuple = TupleUtil.tuple("自定义2元组", 123.456, 789);

   System.out.println("3元组first: " + threeTuple.first);
   System.out.println("3元组second: " + threeTuple.second);
   System.out.println("3元组third: " + threeTuple.third);

   List<String> list = Arrays.asList("这是第1个字符串", "这是第2个字符串", "这是第3个字符串");
   TwoTuple<List<String>, Integer> twoTuple = TupleUtil.tuple(list, list.size());

   System.out.println("2元组first: " + twoTuple.first);
   System.out.println("2元组second: " + twoTuple.second);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识IDEA

一、IDEA简介 IDEA 全称 IntelliJ IDEA&#xff0c;是 JAVA编程语言开发的集成环境。IntelliJ 在业界被公认为最好的 java开发⼯具 之⼀&#xff0c;尤其在智能代码助⼿、代码⾃动提示、重构、J2EE⽀持、Ant、JUnit、CVS整合、代码审 查⽅⾯。 JetBrains官⽹ : JetBrains: Esse…

计算机网络TCP/UDP知识点

这是一些在学习过程中关于计算机网络八股文的一些知识点记录&#xff1a; TCP/UDP TCP怎么保证可靠性 1.序列号&#xff0c;确认应答&#xff0c;超时重传 数据到达接收方&#xff0c;接收方需要发出一个确认应答&#xff0c;表示已经收到该数据段&#xff0c;并且确认序号…

有哪些核定生产能力的方法?详解标准工时的测定方法与核定方法!

在当今制造业的快速发展中&#xff0c;生产能力管理已成为企业核心竞争力的关键。它不仅关系到企业如何高效地满足市场需求&#xff0c;更直接影响到生产成本的控制和市场响应速度。准确核定生产能力&#xff0c;是实现生产计划与企业资源优化配置的桥梁。本文将深入探讨核定生…

KCP源码解析系列(一)KCP协议介绍

一、什么是KCP TCP是为流量设计的&#xff08;每秒内可以传输多少KB的数据&#xff09;&#xff0c;讲究的是充分利用带宽。而 KCP是为流速设计的&#xff08;单个数据包从一端发送到一端需要多少时间&#xff09;&#xff0c;以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的…

Linux环境安装Docker Engine并打包部署Java项目

文章目录 1、卸载老版本2、配置docker仓库3、安装最新版docker4、启动docker启动重启开机启动停止查看状态&#xff1a;已经启动查看状态&#xff1a;没有启动 5、查看版本6、运行hello world测试7、配置镜像8、使用docker安装一个应用9、其他命令查看运行的docker应用查看容器…

【网络ping】无法ping通电脑 服务器失败是什么原因

【网络ping】无法ping通电脑 服务器失败是什么原因 转载&#xff1a; https://www.lsjlt.com/ask/show/show.php?id80772631782 点击此处 查看博文《无法ping通的原因》 一、无法ping 通的原因 网络连接问题&#xff1a;首先需要检查网络连接是否正常。可以尝试通过ping其他…

全国首个数据要素人才标准,亿信华辰携76家单位共同起草

在数字化浪潮汹涌的今天&#xff0c;数据已跃升为社会经济发展的核心引擎。如何精准、高效地评估数据要素领域人才的专业能力&#xff0c;成为了亟待解决的关键议题。亿信华辰积极响应国家战略布局&#xff0c;依托自身在大数据管理与应用领域的深厚底蕴&#xff0c;携手业界76…

阿里推出视频 AI 生成式框架 Tora,通过轨迹生成视频

在科技高速发展的今天&#xff0c;AI 已经开始融入人们的生活&#xff0c;就在不久前阿里集团推出了一款可以生成视频的 AI 框架 Tora&#xff0c;这是一款可以面向轨迹的 DiT 框架&#xff0c;它可以结合文本、视觉以及轨迹生成视频。 Tora 之前有可以生成视频的模型也就是扩…

Docker数据管理和网络管理

文章目录 一、Docker数据管理Docker容器的分层哪些数据需要持久化容器数据持久保存方式数据卷&#xff08;data volume&#xff09;数据卷的使用场景数据卷的特点数据卷使用方法实际例子 二、网络管理Docker安装完成后默认的网络设置创建容器后的网络配置修改默认网络设置容器名…

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算&#xff01;这一次&#xff0c;完成列表的渲染和统计计算的内容&#xff0c;比如&#xff0c;统计购物车内有多少货物的数量&#xff0c;及商品的总价格。 <script setup> import { useCartStore } from /stores/c…

RPA财务机器人是什么,RPA的具体应用场景有哪些?| 实在RPA研究

越来越多的人工智能及超自动化技术在企业财务工作中得以普及应用&#xff0c;以提升财务工作效率&#xff0c;促进财务部门实现全面数字化转型。 RPA财务机器人是什么&#xff1f; RPA&#xff0c;即机器人流程自动化&#xff08;Robotic Process Automation&#xff09;&#…

【方案合集】园区数据治理解决方案(PPT原件)

1、园区大数据治理综述 2、园区大数据治理总体架构 3、园区大数据治理演进路线 4、园区大数据治理建设实施 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划…

大模型的当前和未来

自2022年年底ChatGPT打响大模型热潮第一枪&#xff0c;至今已有一年半多的时间&#xff0c;大模型持续受到业界高度关注。大模型当前发展情况如何&#xff0c;未来又将如何演进发展&#xff1f; 大模型入门 1.什么是大模型、超大模型和Foundation Model&#xff1f; 大模型**…

『 Linux 』网络基础(二)

文章目录 数据在不同层之间的名称数据的跨网络传输端口号TCP协议与UDP协议网络字节序套接字编程的种类 数据在不同层之间的名称 以TCP/IP模型为例,数据在不同层之间有不同名称; 应用层(Applicant Layer) 数据名称一般为 消息(Message),请求/响应(Request/Response); 在这一层…

图像处理中的一些知识点详解

目录 Sobel算子的详细由来以及scharr算子laplace算子的由来 Sobel算子的详细由来以及scharr算子 具体解释可以参考&#xff1a;这篇知乎的前两个回答&#xff0c;尤其第二个回答。 补充&#xff1a;这里的梯度计算使用的是前向差分和后向差分相结合的中心差分思想&#xff08;…

看看月薪3W的电商运营,怎么做数据分析!

作为电商运营的你&#xff0c;得学会分析数据才是真正学会运营。其实不是数据分析太难&#xff0c;而是你没有找对方法&#xff01; 首先&#xff0c;从分析框架方面来看&#xff0c;可以分为【店铺整体、爆款单品、竞品店铺、推广数据、行业大盘】5个维度。从这些维度考虑&am…

【Linux系列】sshpass使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐

效果如下&#xff1a; 图片随便找的&#xff0c;可能需要调下样式&#xff0c;代码复制可用&#xff0c;留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…

【CTF | WEB】001、攻防世界WEB题目之backup

文章目录 backup题目描述:解题思路&#xff1a;解题过程&#xff1a; backup 题目描述: X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; 进入题目后显示&#xff1a; 解题思路&#xff1a; 在进行网站安全检查时&#xf…

北大和鹏城实验室联合推出的图像视频统一多模态大模型Chat-UniVi(CVPR 2024)

Chat-UniVi: Unified Visual Representation Empowers Large Language Models with Image and Video Understanding 论文信息 paper&#xff1a;CVPR 2024 code&#xff1a;https://github.com/PKU-YuanGroup/Chat-UniVi 训练130亿大模型仅3天&#xff0c;北大提出Chat-UniVi…