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 Xewee.Zhiwei.Wang@gmail.com * @site http://wzwahl36.net * @version 2012-3-21 上午11:15:03 * @param <A> * @param <B> */publicclassTwoTuple<A, B> {    publicfinalA first;    publicfinalB second;        publicTwoTuple(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 Xewee.Zhiwei.Wang@gmail.com * @site http://wzwahl36.net * @version 2012-3-21 上午11:15:50 * @param <A> * @param <B> * @param <C> */publicclassThreeTuple<A, B, C> extendsTwoTuple<A, B> {    publicfinalC third;        publicThreeTuple(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 | importjava.util.ArrayList;importjava.util.List;importcom.bluesea.bean.GoodsBean;/** * <p>Title: TupleUtil</p> * <p>Description:  * 元组辅助类,用于多种类型值的返回,如在分页的时候,后台存储过程既返回了查询得到的 * 当页的数据(List类型),又得到了数据表中总共的数据总数(Integer类型),然后将这 * 两个参数封装到该类中返回到action中使用 * 使用泛型方法实现,利用参数类型推断,编译器可以找出具体的类型 * </p> * @author Xewee.Zhiwei.Wang@gmail.com * @site http://wzwahl36.net * @version 2012-3-21 上午09:59:39 * @param <A> * @param <B> */publicclassTupleUtil {        publicstatic<A, B> TwoTuple<A, B> tuple(A a, B b) {        returnnewTwoTuple<A, B>(a, b);    }        publicstatic<A, B, C> ThreeTuple<A, B, C> tuple(A a, B b, C c) {        returnnewThreeTuple<A, B, C>(a, b, c);    }    // 测试    publicstaticvoidmain(String[] args) {        List<GoodsBean> goodsBeans = newArrayList<GoodsBean>();        for(inti = 1; i < 26; i++) {            GoodsBean goodsBean = newGoodsBean();            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);    }} | 
 
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号