网上找到一个,但是是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;
}
}