zoukankan      html  css  js  c++  java
  • Java元组Tuple使用实例--转载

    原文地址:http://50vip.com/35.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>
     */
    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 Xewee.Zhiwei.Wang@gmail.com
     * @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 Xewee.Zhiwei.Wang@gmail.com
     * @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);
        }
    }

     

  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4514659.html
Copyright © 2011-2022 走看看