数据来自两个系统时的内存分页算法

本文介绍了一种将来自两个不同应用程序的数据集进行内存分页查询并合并的方法。具体实现了根据不同业务时间的数据源进行数据合并,并确保了数据完整性和正确性。

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

业务数据来自a-app与b-app,其中a-app中数据的业务时间早于b-app,现在需要对这两个来源的数据做内存分页查询。


public ResultGson<ProductPaginationBean> mergePaginationQuery(int pageNo, int pageSize) {
ResultGson<ProductPaginationBean> productPaginationResultGson = new ResultGson<ProductPaginationBean>("000", "success", null);
ResultGson<ProductPaginationBean> paginationOneResultGson = paginationOneQuery(pageNo, pageSize);
ResultGson<ProductPaginationBean> paginationTwoBeanResultGson = paginationSecondQuery(pageNo, pageSize);
int firstTotalCount = paginationOneResultGson.getData().getTotalCount();
int secondTotalCount = paginationTwoBeanResultGson.getData().getTotalCount();
int totalCount = firstTotalCount + secondTotalCount;

int firstTotalPage = firstTotalCount / pageSize;
int firstMode = firstTotalCount % pageSize;

if (firstTotalPage > pageNo) {
ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, paginationOneResultGson.getData().getProductDTOList());
productPaginationResultGson.setData(productPaginationBean);
return productPaginationResultGson;
}

if (firstTotalPage < pageNo) {
ResultGson<ProductPaginationBean> productPaginationFirstResultGson = paginationSecondQuery(pageNo - firstTotalPage -1, pageSize);
ResultGson<ProductPaginationBean> productPaginationSecondResultGson = paginationSecondQuery(pageNo - firstTotalPage, pageSize);
List<ProductDTO> mergedProductList = mergeDataAfterRemoveDataOfFirstList(pageSize-firstMode, productPaginationFirstResultGson.getData().getProductDTOList(), productPaginationSecondResultGson.getData().getProductDTOList());
ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, mergedProductList);
productPaginationResultGson.setData(productPaginationBean);
return productPaginationResultGson;
}

if (firstTotalPage== pageNo) {
paginationOneResultGson = paginationOneQuery(pageNo, pageSize);
paginationTwoBeanResultGson = paginationSecondQuery(0, pageSize);
List<ProductDTO> productDTOList = mergeDataDeleteSomeIfPossible(paginationOneResultGson.getData().getProductDTOList() , paginationTwoBeanResultGson.getData().getProductDTOList() , pageSize);
ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, productDTOList);
productPaginationResultGson.setData(productPaginationBean);
return productPaginationResultGson;
}


return productPaginationResultGson;
}

private List<ProductDTO> mergeDataAfterRemoveDataOfFirstList(int removeSize, List<ProductDTO> firstProductList, List<ProductDTO> secondProductList) {
List<ProductDTO> resultProductList = new ArrayList<>();
if (firstProductList.size() > removeSize) {
resultProductList.addAll(firstProductList.subList(removeSize, firstProductList.size()));
}

int cutSize = removeSize > secondProductList.size() ? secondProductList.size() : removeSize;

resultProductList.addAll(secondProductList.subList(0, cutSize));
return resultProductList;
}

private List<ProductDTO> mergeDataDeleteSomeIfPossible(List<ProductDTO> firstProductList, List<ProductDTO> secondProductList, int pageSize) {
List<ProductDTO> resultProductList = new ArrayList<>();
resultProductList.addAll(firstProductList);
resultProductList.addAll(secondProductList);

if (resultProductList.size() > pageSize) {
resultProductList = resultProductList.subList(0, pageSize);
}

return resultProductList;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值