自定义分页,计算当前页码的周围页码,使当前页码尽可能处于正中

取出当前页码为中心的5个页码

页码: 1  2  3  4  5  6  7  8  9  10 11  

例1: 当前页码1 取出的值  1  2  3  4  5 

例2: 当前页码2 取出的值  1  2  3  4  5 

例3: 当前页码5 取出的值  3  4  5  6  7  8 

例4: 当前页码10 取出 的值  7  8  9  10  11   

/**
	 * 求出页码列表,使页码处于正中间
	 * 
	 * @param page
	 *            当前查询页
	 * @param num
	 *            每页数量
	 * @param count
	 *            记录总数
	 * @return
	 */
	public ArrayList<Integer> pagingUtil(int page, int num, int count) {
		// 页码序列长度(只测试过奇数)
		final int LENGTH = 5;
		// 边界
		final int MARGIN = LENGTH / 2;
		// 存储页码序列
		ArrayList<Integer> list = new ArrayList<Integer>();

		// 总页数
		int pageCount;
		if (count % num > 0) {
			pageCount = count / num + 1;
		} else {
			pageCount = count / num;
		}

		// 当前查询的页码超过总页码
		if (page > pageCount) {
			return list;
		}

		if (pageCount >= LENGTH) {
			// 两边至少有两个
			if (pageCount - page >= MARGIN && page - 1 >= MARGIN) {
				int testNum = page - MARGIN;
				for (int i = 0; i < LENGTH; i++) {
					list.add(testNum++);
				}
				return list;
			}
			// 左边没有够两个
			if (page - 1 < MARGIN) {
				for (int i = 0; i < LENGTH; i++) {
					list.add(i, i + 1);
				}
				return list;
			}
			// 右边没有够两个
			if (pageCount - page < MARGIN && page <= pageCount) {
				int a = 0;
				for (int i = pageCount - LENGTH; i < pageCount; i++) {
					list.add(a++, i + 1);
				}
				return list;
			}

		} else {
			for (int i = 0; i < pageCount; i++) {
				list.add(i, i + 1);
			}
			return list;
		}
		return list;
	}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值