http://www.cnblogs.com/flyingeagle/articles/6696780.html 原文地址

一.为什么使用元组tuple?

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

二.源码实例
1.二元组

package com.bijian.test;/*** 两个元素的元组,用于在一个方法里返回两种类型的值*/
public class TwoTuple<A, B> {public final A first;public final B second;public TwoTuple(A a, B b) {this.first = a;this.second = b;}
}

2.扩展为三元组(按此可以任意扩展)

package com.bijian.test;/*** 三个元素的元组,用于在一个方法里返回三种类型的值*/
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;}
}

3.实体DTO

package com.bijian.test;public class GoodsBean {private int goodsId;public int getGoodsId() {return goodsId;}public void setGoodsId(int goodsId) {this.goodsId = goodsId;}
}

4.元组操作工具类、测试类(可按需自定义)

package com.bijian.test;import java.util.ArrayList;
import java.util.List;/*** 元组辅助类,用于多种类型值的返回,如在分页的时候,后台存储过程既返回了查询得到的* 当页的数据(List类型),又得到了数据表中总共的数据总数(Integer类型),然后将这* 两个参数封装到该类中返回到action中使用* 使用泛型方法实现,利用参数类型推断,编译器可以找出具体的类型*/
public class TupleUtil {public static <A, B> TwoTuple<A, B> tuple(A a, B b) {return new TwoTuple<A, B>(a, b);}public static <A, B, C> ThreeTuple<A, B, C> tuple(A a, B b, C c) {return new ThreeTuple<A, B, C>(a, b, c);}// 测试public static void main(String[] args) {List<GoodsBean> goodsBeans = new ArrayList<GoodsBean>();for(int i = 1; i < 26; i++) {GoodsBean goodsBean = new GoodsBean();goodsBean.setGoodsId(i);goodsBeans.add(goodsBean);}Integer totalProperty = 47;
//      TupleUtil<List<GoodsBean>, Integer> tupleUtil = new TupleUtil<List<GoodsBean>, Integer>(goodsBeans, totalProperty);TwoTuple<List<GoodsBean>, Integer> twoTuple = TupleUtil.tuple(goodsBeans, totalProperty);List<GoodsBean> list = twoTuple.first;System.out.println(list);System.out.println(twoTuple.second);}
}

运行结果:

三.org.apache.commons.lang3.tuple

用于处理一对键值的对象pair类似于Map.entry,commons lang3增加了可以处理3个值的Triple基类,此包下定义了Pair<L,R>抽象基类,及MutablePair,MutableTriple,ImmutablePair,ImmutableTriple子类。
        一个线程非安全,另一个线程安全
接口:
1.Pair:封装一对键值对。
        实现类:可变:MutablePair<L,R>,不可变:ImmutablePair
2.Triple:封装3个值的类
        实现类:ImmutableTriple; MuttableTriple<L,M,R>

如上实例修改如下:

package com.bijian.test;import java.util.ArrayList;
import java.util.List;import org.apache.commons.lang3.tuple.Pair;public class TupleUtil2 {// 测试public static void main(String[] args) {List<GoodsBean> goodsBeans = new ArrayList<GoodsBean>();for(int i = 1; i < 26; i++) {GoodsBean goodsBean = new GoodsBean();goodsBean.setGoodsId(i);goodsBeans.add(goodsBean);}Integer totalProperty = 47;Pair<List<GoodsBean>, Integer> twoTuple = Pair.of(goodsBeans, totalProperty);List<GoodsBean> list = twoTuple.getLeft();System.out.println(list);System.out.println(twoTuple.getRight());}
}

运行结果:

PS:org.apache.commons.lang3.tuple.Pair的compareTo方法

org.apache.commons.lang3.tuple.Pair的compareTo方法的入参不能为空,实例如下。

package com.bijian.test;import org.apache.commons.lang3.tuple.Pair;public class PairTest {private Pair<Long, Long> pair = Pair.of(100l, 60l);public static void main(String[] args) {PairTest pairTest = new PairTest();pairTest.test1();pairTest.test2();}public void test1() {System.out.println("pair" + pair);  //pair(100,60)Pair<Long, Long> newPair = Pair.of(3000l, 30l);System.out.println("newPair" + newPair);  //newPair(3000,30)System.out.println(newPair != pair);  //trueSystem.out.println(pair.compareTo(newPair));  //-1
    }public void test2() {System.out.println("pair" + pair);  //pair(100,60)Pair<Long, Long> newPair = null;System.out.println("newPair" + newPair);  //newPairnullSystem.out.println(newPair != pair); //trueSystem.out.println(pair.compareTo(newPair));  //Exception in thread "main" java.lang.NullPointerException
    }
}

Java元组Tuple使用实例相关推荐

  1. Java元组Tuple使用实例--转载

    原文地址:http://50vip.com/35.html 一.为什么使用元组tuple? 元组和列表list一样,都可能用于数据存储,包含多个数据:但是和列表不同的是:列表只能存储相同的数据类型,而 ...

  2. java tuple_Java元组Tuple使用实例

    一.为什么使用元组tuple? 元组和列表list一样,都可能用于数据存储,包含多个数据:但是和列表不同的是:列表只能存储相同的数据类型,而元组不一样,它可以存储不同的数据类型,比如同时存储int.s ...

  3. Java元组Tuple介绍与使用

    一.元组介绍 仅仅一次方法调用就可以返回多个对象,你应该经常需要这样的功能吧.可以return语句只允许返回单个对(可能有人说返回一个集合就可以了,请记住,一个集合也只是一个对象而已)因此,解决办法就 ...

  4. Java元组Tuple

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

  5. java 元组 getinteger_TS数据类型:从C++/Java/Python到TS看元组tuple—元组的来龙去脉...

    在C++有Java这种强类型语言中,常用的Array.List.Set ,在集合中只能是一种类型(可以复习下:<再谈Java数据结构-分析底层实现与应用注意事项). int data[] = n ...

  6. java元组_Java元组Tuple介绍与使用

    一.元组介绍 仅仅一次方法调用就可以返回多个对象,你应该经常需要这样的功能吧.可以return语句只允许返回单个对(可能有人说返回一个集合就可以了,请记住,一个集合也只是一个对象而已)因此,解决办法就 ...

  7. Python 元组 (tuple)

    作者博文地址:https://www.cnblogs.com/liu-shuai/ Python的元组与列表类似,同样可通过索引访问,支持异构,任意嵌套.不同之处在于元组的元素不能修改.元组使用小括号 ...

  8. python元组的创建取值排序计数_Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】...

    本文实例讲述了Python元组 tuple的概念与基本操作.分享给大家供大家参考,具体如下: 元组 tuple 元组 tuple的定义 元组的创建 元组的元素访问和计数 1. 元组的元素不能修改 2. ...

  9. python教程:列表(list)、元组(tuple)、字典(dict)

    一.列表 1.定义列表,取出列表中的值 names = [] #定义空列表 names = ['a','b','c'] #定义一个非空列表# 取出列表中的值 >>> names = ...

最新文章

  1. 眼电、脑电视频课程汇总
  2. jps查看java进程以及pwdx通过pid查看进程所在位置
  3. 每天一道LeetCode-----找到给定数组的连续子数组,使这个子数组的和最大,要求复杂度为O(n)
  4. linux里如何创建c文件夹,使用c语言在Linux中的/ tmp文件夹中创建文本文件
  5. (18)System Verilog运算精度补齐示例
  6. bootstrap今天的学习心得
  7. android 相机功能修改,安卓用户又少了一项自由,Android 11不再支持更改默认相机程序...
  8. EasiCSDeep:利用表面肌电信号识别颈椎病的深度学习模型
  9. App测试如何进行?手机app测试要点
  10. 音量放大器--软件实现
  11. 实现微信小程序版本管理
  12. 用mapgis数据转成arcgis中shape格式的方法
  13. wifi的html页面,WiFi
  14. 亚马逊速卖通tro律所禁令冻结资金的解决方法
  15. 数学建模:地貌图的完成
  16. Day3-中文分词技术(常用分词技术介绍)
  17. Excel日期显示为数字,不能正常显示为日期
  18. java aspose 导出word_aspose.words导出html 转word文档带图片,(无网络也可以看图)
  19. php跳转到qq界面,PHP实现QQ登录的开原理和实现过程
  20. 一次让人晕到吐血的接包经历

热门文章

  1. 冷数据、温数据、热数据,难道数据也是有温度的?
  2. Photoshop PS图层混合模式详解
  3. Android开发是简单的「能写应用就行」吗?复习指南
  4. 欧海:海梦易商道APP是教育与商业的双创新
  5. 苹果MT4手机软件怎么下载?下载后怎么使用?
  6. 苹果发信用卡,其它硅谷巨头如何发力金融科技?
  7. 怎么制作出好玩的头像?教你制作个性头像小技巧
  8. 云南大学计算机学院导师信息,云南大学软件学院研究生导师介绍:姚绍文(教授,博士生导师)...
  9. Java设计模式之《装饰器模式》及应用场景
  10. LeetCode刷题记