Java Tuple使用实例(转)

本文介绍如何使用自定义元组类简化Java应用程序中的分页查询逻辑。通过组合不同类型的数据(如列表和整数),元组提供了一种有效的方法来一次性返回多个值,特别适用于需要同时获取当前页面数据和总记录数的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自链接: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>
  */
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);
     }
}

转载于:https://www.cnblogs.com/hubavyn/p/7228182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值