Java Tuple使用实例(转)

转自链接:http://www.cnblogs.com/davidwang456/p/4514659.html

一、为什么使用元组tuple

元组和列表list一样,都可能用于数据存储,包含多个数据;但是和列表不同的是:列表只能存储相同的数据类型,而元组不一样,它可以存储不同的数据类型,比如同时存储int、string、list等,并且可以根据需求无限扩展。

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

二、源码实例

二元组:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/** <p>Title: TwoTuple</p>

 * <p>Description: 两个元素的元组,用于在一个方法里返回两种类型的值</p>

 * @author [email protected]

 * @site http://wzwahl36.net

 * @version 2012-3-21 上午11:15:03

 * @param <A>

 * @param <B>

 */

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;

    }

}

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

/**

 * <p>Title: ThreeTuple</p>

 * <p>Description: 三个元素的元组,用于在一个方法里返回三种类型的值</p>

 * @author [email protected]

 * @site http://wzwahl36.net

 * @version 2012-3-21 上午11:15:50

 * @param <A>

 * @param <B>

 * @param <C>

 */

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;

    }

}

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

import java.util.ArrayList;

import java.util.List;

import com.bluesea.bean.GoodsBean;

/**

 * <p>Title: TupleUtil</p>

 * <p>Description:

 * 元组辅助类,用于多种类型值的返回,如在分页的时候,后台存储过程既返回了查询得到的

 * 当页的数据(List类型),又得到了数据表中总共的数据总数(Integer类型),然后将这

 * 两个参数封装到该类中返回到action中使用

 * 使用泛型方法实现,利用参数类型推断,编译器可以找出具体的类型

 * </p>

 * @author [email protected]

 * @site http://wzwahl36.net

 * @version 2012-3-21 上午09:59:39

 * @param <A>

 * @param <B>

 */

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);

    }

}

时间: 2024-10-10 00:45:31

Java Tuple使用实例(转)的相关文章

java 调用mysql实例

java 调用mysql实例: package com.tanglei.test1; import java.sql.*; public class Testsql{ public static void main(String []args){ Mysql mysql=new Mysql(); } } class Mysql{ // MySQL的JDBC URL编写方式:jdbc:mysql://主机名称:连接端口/数据库的名称?参数=值 // 避免中文乱码要指定useUnicode和char

Java内存溢出实例总结

java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: <img width="492" height="325" src="file:///C:/Users/zpy/AppData/Local/Temp/msohtml1/01/clip_image001.jpg" <="" span="">' v:shapes="_x0000_i1029&q

memcached—Java操作Memcached实例

前面博客介绍了如何在Windows操作系统中安装Memcached,总结一下如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import jav

Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

Java 类的实例变量初始化的过程 静态块.非静态块.构造函数的加载顺序 先看一道Java面试题: 1 public class Baset { 2 private String baseName = "base"; 3 // 构造方法 4 public Baset() { 5 callName(); 6 } 7 // 成员方法 8 public void callName() { 9 // TODO Auto-generated method stub 10 System.out.p

java操作Hbase实例

所用HBase版本为1.1.2,hadoop版本为2.4 /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apach

java之IO实例

实例1:从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印 分析:这里用到了file类的方法和递归 public  class  Test10{ public  static  void   main(String[ ]  args) { Scanner  sc=new Scanner(System.in); String  path=sc.nextLine( ); File   f=new  File(path); System.out.println(f.getName

java之登录实例(面向对象,静态,scanner等)

分析:抽取用户类,提取出用户的属性,方法 用户类测试:判断登陆,注册等 User : 用户类    package cn.my.login; import java.util.Scanner; /** *  分析:用户的基本信息 *  用户名,密码,邮箱,电话,地址 *  登录,注册方法 * */public class User { private String username; private String password; private String email; private S

JAVA上百实例源码以及开源项目

简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬.向往!此时此景,笔者只专注Android.Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能.编辑音乐软件的朋友,这款实例会对你有所帮助.Calendar万年历 1个目标文件EJ

java反射技术实例

java反射技术实例?1. [代码][Java]代码     package com.gufengxiachen.java.reflectiontest; public class Person {private String name;private int age;private static int total;public Person(){super();total++;}public Person(String name,int age){super();this.name=name