`

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

    博客分类:
  • java
 
阅读更多
业务数据来自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;
    }
分享到:
评论

相关推荐

    SimuladorSO:模拟LRU分页算法

    仿真器模拟LRU分页算法自述文件-如此LRU算法模拟器代码路径:FAB.DE ENTRADAS-&gt; MAIN-&gt; PROCESS-&gt; MMU-&gt; LIST-&gt; STATUS 该计划中使用的内存类型: MemFis:模拟操作系统的RAM内存,它是一个数组MemVirt:具有两倍...

    《计算机操作系统》期末复习指导

    死锁是两个或两个以上的进程中的每一个,都在等待其中另一个进程释放资源而被封锁,它们都无法向前推进,称这种现象为死锁现象。 产生死锁的原因是共享资源有限,多个进程对共享资源的竞争,而且操作不当。 ...

    虚拟存储器管理仿真 操作系统 操作系统课程设计 java

    整体的仿真流程是将预设的两个作业输出到控制台,然后通过输入作业的作业号,系统将会自动为两个作业生成各自的页表。这时系统将提示输出选择的作业,选择任意一个。然后系统提示是否选择重定位。输入‘y’则进行重...

    电大计算机本科操作系统作业及答案定稿版.docx

    一张分区说明表 一张分区说明表和一张空闲分区表 一张"位示图"构成的分区说明表 由系统自定 在存储管理中,为实现地址映射,硬件应提供两个寄存器,一个是基址寄存器。另一个是( )。 A.控制寄存器 B.程序状态字...

    操作系统讨论课及课程ppt.rar

    2.在一个请求分页系统中,采用LRU页面置换算法时,加入一个作业的页面走向为: 1,3,2,1,1,3,5,1,3,2,1,5。当分配给该作业的物理块数分别为3和4时,在访问过程中所发生的缺页率为()。 A.25%, 33% B. 25%, 100% C.50%...

    电大计算机本科操作系统作业及答案.docx

    一张分区说明表 一张分区说明表和一张空闲分区表 一张"位示图"构成的分区说明表 由系统自定 在存储管理中,为实现地址映射,硬件应提供两个寄存器,一个是基址寄存器。另一个是( )。 A.控制寄存器 B.程序状态字...

    电大计算机本科操作系统作业及答案(1).docx

    一张分区说明表 一张分区说明表和一张空闲分区表 一张"位示图"构成的分区说明表 由系统自定 在存储管理中,为实现地址映射,硬件应提供两个寄存器,一个是基址寄存器。另一个是( )。 A.控制寄存器 B.程序状态字...

    电大计算机本科操作系统作业及答案(2).docx

    一张分区说明表和一张空闲分区表 一张"位示图"构成的分区说明表 由系统自定 在存储管理中,为实现地址映射,硬件应提供两个寄存器,一个是基址寄存器。另一个是( )。 A.控制寄存器 B.程序状态字寄存器 C.限长...

    清华大学Linux操作系统原理与应用

    6.5 实例——利用系统调用实现一个调用日志收集系统 143 6.5.1 代码体系结构 143 6.5.2 把代码集成到内核中 146 6.5.3 实现步骤 148 习题6 148 第7章 内核中的同步 149 7.1 临界区和竞争状态 149 7.1.1 临界区举例 ...

    操作系统实验

    假定模拟系统中有键盘、鼠标、打印机和显示器四个设备,三个控制器和两个通道,采用安全分配方式。 1、设备管理子系统涉及到系统设备表(SDT)、通道控制表(CHCT)、控制器控制表(COCT)和设备控制表(DCT)来体现...

    UNIX操作系统教程 张红光

    第1章绪论.1 1.1操作系统概述1 1.1.1建立操作系统的目标1 1.1.2操作系统是用户与计算机的接口1 1.1.3操作系统是资源管理器2 1.2UNIX系统的主要...UNIX基本概念及入门技术10 2.1UNIX系统基本常识10 2.1.1两种前端机10 /&gt;...

    BIWEB WMS PHP开源企业建站系统 v5.8.5.rar

    新增了smarty的两个插件,分别是调用CSS和JS的,可以支持多个CSS和JS调用,而不需求修改模板。 6.新增了视频转flv底层类。 7.修改了smarty缓存的方式,在底层新增了缓存判断函数。 8.增加了共享内存缓存方式,后台...

    深入分析Linux内核源码

    9.5.3 分配一个数据块 第十章 模块机制 10.1 概述 10.1.1 什么是模块 10.1.2 为什么要使用模块? 10.2 实现机制 10.2.1 数据结构 10.2.2 实现机制的分析 10.3 模块的装入和卸载 10.3.1 实现机制 10.3.2 ...

    自己动手写操作系统(含源代码).part2

    原因在于虽然我们的试验性 OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名字来自于我的...

    ucore实验3实验报告.doc

    问题分析:当启动分页机制以后,如果一条指令或数据的虚拟地址所对应的物理页不在 内存中,或者访问权限不够,那么就会产生页错误异常。其具体原因有以下三点: 页表项全为0——虚拟地址与物理地址为建立映射关系或...

    自己动手写操作系统(含源代码).part1

    原因在于虽然我们的试验性 OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名字来自于我的...

    本文为省计算机二级等级考试软件技术基础部分的提纲

    十二、 二叉树(每个结点只有最多两个分支的树) 十三、 遍历:先序(先根:根左右)、中序(中根:左根右)、后序(后根:左右根) 十四、 图(结点、边) 十五、 关系数据库:线性表 层次数据库:树 网状数据库:...

    JAVA上百实例源码以及开源项目源代码

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    内工大 计算机网络 试题2010-2011B

    4.在一请求分页系统中,假如一个作业的页面走向为:4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数为4时(开始时没有装入页面),采用LRU页面淘汰算法将产生( 8 )次缺页中断。 5.信号量被广泛用于...

    22春“计算机科学与技术”专业《操作系统概论》在线作业一答案参考2.docx

    进程具有并发性和( )两个重要属性。 A.静态性 B.易用性 C.封闭性 D.动态性 参考答案:D 7. 在存储器中存放多个作业,使之同时处于运行状态的程序设计方法叫做多道程序设计。( ) A.错误 B.正确 参考答案:B 8. 若...

Global site tag (gtag.js) - Google Analytics