对list集合分页展示的工具类

对list集合分页的工具类

先查询出全部,对集合进行任意操作,再分页展示,用于特殊场景要求,数据量较大时不适用

import com.github.pagehelper.PageInfo;
import lombok.Data;

import java.util.List;

/**
 * 集合分页工具类
 * @param <T> 动态类型
 */
@Data
public class ListSub<T> {

    //当前页面
    private int page = 1;

    //显示多少行
    private int rows = 10;

    //总记录条数
    private int total;

    public ListSub(int page, int rows) {
        this.page = page;
        this.rows = rows;
    }

    public ListSub() {
    }

    /**
     * 对list集合进行分页处理
     * @return 分页后的List<T>对象
     */
    public List<T> ListSplit(List<T> list) {
        return list.subList(rows * (page - 1), ((rows * page) > list.size() ? list.size() : (rows * page)));
    }

    /**
     * 集合分页方法
     * @param list 待处理集合
     * @param pageNum 页码
     * @param pageSize 每页展示数
     * @return PageInfo<T>信息
     */
    public PageInfo<T> page(List<T> list, Integer pageNum, Integer pageSize) {
        pageNum = pageNum < 1 ? 1 : pageNum;
        pageNum = pageNum > list.size() / pageSize + 1 ? list.size() / pageSize + 1 : pageNum;
        pageSize = pageSize == null ? list.size() : pageSize;
        PageInfo<T> pageInfo = new PageInfo<>(new ListSub(pageNum, pageSize).ListSplit(list));
        pageInfo.setTotal(list.size());
        return pageInfo;
    }
}

调用示例——查询数据后构建树结构目录

public PageInfo serverList(String serverName, Integer pageSize, Integer pageNum, String serverType,
                               @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startPublishTime,
                               @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endPublishTime, String publisherName, String distinguish, LoginUser loginUser) {

        //正常查
        List<SysServer> sysServers = sysServerMapper.selectSysServerServerByNames(serverName, serverType, startPublishTime, endPublishTime, publisherName, distinguish);

        //查全部
        List<SysServer> sysServerList = sysServerMapper.selectSysServerServerByNames(null, null, null, null, null, null);

        List<HashMap<String, Object>> sysTableList = sysServerMapper.serverSysTable();

        for (SysServer sysServer : sysServers) {
            String otherParameters = sysServer.getOtherParameters();
            if (StringUtils.isNotEmpty(otherParameters) && otherParameters.contains("tableName")) {
                Map<String, String> parse = (Map<String, String>) JSONObject.parse(otherParameters);
                sysServer.setOtherParameters(parse.get("tableName"));
                sysServer.setSysTableList(sysTableList);
            }
        }

        List<SysServer> menuTree = new ArrayList<>();
        menuTree.addAll(sysServers);

        //找所有相关父节点
        for (SysServer sysServer : sysServers) {
            menuTree.addAll(getParent(sysServer, sysServerList));
            menuTree.addAll(getChildren(sysServer, sysServerList));
        }

        //去重
        menuTree = menuTree.stream()
                .collect(Collectors.collectingAndThen(Collectors.toCollection(()
                        -> new TreeSet<>(Comparator.comparing(SysServer::getServerId))), ArrayList::new));

        //构建树
        menuTree = buildMenuTree(menuTree, 0);

        //排序树
        Collections.sort(menuTree);

        //集合分页
        return new ListSub<SysServer>().page(menuTree, pageNum, pageSize);
    }

    /**
     * 查询该服务所有的父节点(后台)
     * @param sysServer 待查询父节点的服务
     * @return 返回父集合
     */
    public List<SysServer> getParent(SysServer sysServer, List<SysServer> sysServerList) {
        List<SysServer> menuTree = new ArrayList<>();
        if (sysServer == null || sysServerList == null || sysServer.getParentId() == null || sysServer.getParentId() == 0) {
            return menuTree;
        }
        for (SysServer server : sysServerList) {
            if (server.getServerId().equals(sysServer.getParentId())) {
                menuTree.add(server);
                if (server.getParentId() != null && !new Integer(0).equals(server.getParentId())) {
                    menuTree.addAll(getParent(server, sysServerList));
                } else {
                    break;
                }
            }
        }
        return menuTree;
    }

    /**
     * 查询该服务所有的子节点(后台)
     * @param sysServer 待查询父节点的服务
     * @return 返回父集合
     * @author chenyufeng 2022.07.01 10:49
     */
    public List<SysServer> getChildren(SysServer sysServer, List<SysServer> sysServerList) {
        List<SysServer> menuTree = new ArrayList<>();
        //如果是服务就退出本次递归(递归出口)
        if (sysServer == null || sysServerList == null || sysServer.getServerId() == null || "C".equals(sysServer.getMenuType())) {
            return menuTree;
        }
        for (SysServer server : sysServerList) {
            if (server.getParentId() != null && server.getParentId().equals(sysServer.getServerId())) {
                menuTree.add(server);
                //如果是目录就继续向下递归查询
                if (server.getServerId() != null && "M".equals(sysServer.getMenuType())) {
                    menuTree.addAll(getChildren(server, sysServerList));
                } else {
                    break;
                }
            }
        }
        return menuTree;
    }

    //快速生成菜单树(后台)
    private ArrayList<SysServer> buildMenuTree(List<SysServer> sysServers, int string) {
        ArrayList<SysServer> treeList = new ArrayList<>();
        sysServers.forEach(menu -> {
            if (Objects.equals(string, menu.getParentId())) {
                menu.setChildren(buildMenuTree(sysServers, menu.getServerId()));
                treeList.add(menu);
            }
        });
        return treeList;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

薛定不饿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值