java手工分页工具类

手工分页

手工分页用处:当数据使用mybatisPlus分页查询后,需要再次过滤掉筛选数据时,返回的总数失效,此时可以使用手工分页

kotlin手工分页工具类
@Component
class ManualPageUtils {
    /**
     * 封装手动分页
     * @param list 数据集合
     * @param start 起始页
     * @param length 每页尺寸
     */
    fun setPage(list: List<*>, start: Long, length: Long): Map<String, Any?> {
        val result: MutableMap<String, Any?> = LinkedHashMap(8)
        val totalCount = list.size
        // 分页
        var pageNum = totalCount / length
        val surplus = totalCount % length
        if (surplus > 0) {
            pageNum += 1
        }
        result["total"] = totalCount
        result["pages"] = pageNum
        result["current"] = start
        result["size"] = length
        var pageResult: List<T> = arrayListOf()
        if (totalCount != 0) {
            pageResult = getPageSizeDataForRelations(list, length, start) as List<T>
        }
        result["records"] = pageResult
        return result
    }

    /**
     * 手动分页类
     * @param datas
     * @param pageSize
     * @param pageNo
     * @param <T>
     * @return
    </T> */
    private fun <T> getPageSizeDataForRelations(datas: List<T>, pageSize: Long, pageNo: Long): List<T>? {
        val startNum = (pageNo - 1) * pageSize + 1
        if (startNum > datas.size) {
            return null
        }
        val res: MutableList<T> = arrayListOf()
        val rum = datas.size - startNum
        if (rum < 0) {
            return null
        }
        if (rum == 0L) {
            val index = datas.size - 1
            res.add(datas[index])
            return res
        }
        return if (rum / pageSize >= 1) {
            for (i in startNum until startNum + pageSize) {
                res.add(datas[(i - 1).toInt()])
            }
            res
        } else if (rum / pageSize == 0L && rum > 0) {
            for (j in startNum..datas.size) {
                res.add(datas[(j - 1).toInt()])
            }
            res
        } else {
            null
        }
    }
}

参考链接:手工分页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值