分表后分页算法(java)

网上找到一个,但是是PHP的(https://blog.csdn.net/yanfangphp/article/details/78124067),本项目是java的,因此改写成java版的,代码如下: 

package yn.core.handler.readexcel;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class T {
	public static void main(String[] args) {
		JSONArray totalNum = new JSONArray();
		JSONObject obj = new JSONObject();
		obj.put("tableName", "table1");
		obj.put("countNum", 28);
		totalNum.add(obj);
		
		JSONObject obj1 = new JSONObject();
		obj1.put("tableName", "table2");
		obj1.put("countNum", 4);
		totalNum.add(obj1);
		
		JSONObject obj2 = new JSONObject();
		obj2.put("tableName", "table3");
		obj2.put("countNum", 11);
		totalNum.add(obj2);
		
		T t = new T();
		System.out.println(t.tableCount(totalNum,4));
	}
	/**
	* 分页计算方法
	* @param totalNum符合条件的各个表数据数据条数∗∗totalNum符合条件的各个表数据数据条数∗∗totalNum 
	* @param page 当前第几页
	* @return array
	*/
	@SuppressWarnings("unused")
	private JSONArray tableCount(JSONArray totalNum,int page){    
		int prevNum = (page-1) * 10; //之前页面条数    
		int nowNum = 0;
		int i = 0;
		JSONArray resArr = new JSONArray();   
		int arrNum = totalNum.size();
		for (int j = 0; j < totalNum.size(); j++) {
			JSONObject json = totalNum.getJSONObject(j);
			String tableName = json.getString("tableName");
			int countNum = json.getInteger("countNum");
			nowNum += countNum; //当前总条数        
			//大于上页数据则为当前页需要显示数据        
			int pagesize = 0;
			if(nowNum > prevNum){   
				int offset = 0;
				if(resArr.size() > 0){                
					int alyNum = 0;        
					for (int k = 0; k < resArr.size(); k++) {
						String nums = resArr.getJSONObject(k).getString("nums");
						
						alyNum += Integer.valueOf(nums.split(",")[1]);
					}
					offset = countNum-(nowNum - prevNum)+alyNum;           
					pagesize = ((10-alyNum) < countNum) ? (10-alyNum) : countNum;
				}else{                
					offset = countNum-(nowNum - prevNum);                
					pagesize = (nowNum - prevNum > 10) ? 10 : (nowNum - prevNum); 
				}
				JSONObject obj = new JSONObject();
				obj.put("tableName", tableName);
				obj.put("nums", offset+","+pagesize);
				resArr.add(obj);
			}        
			i++; //满足最后一页查询不足10条        
			//足够当前页显示则返回        
			if(pagesize == 10 || i == arrNum){            
				return resArr;       
			}    
		}
		return resArr;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cesium vue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值