• 首页
  • 邻居
  • 关于
  • 归档
  • 搜索
  • 夜间模式
    ©2020-2026  我的学习笔记 Theme by OneBlog

    我的学习笔记博客

    搜索
    标签
    # 随笔 # Java # 教程 # openwrt # Mysql # SQL # 爬虫 # post # Js调优 # MAVEN
  • 首页>
  • Java>
  • 正文
  • List列表转成树,并且根据名称排序

    2024年03月08日 986 阅读 0 评论 1888 字

    List列表转成树前提是数据有panrentid能找到上级,并且根据名称排序

     public static List<ResidentialQuarters> buildTree(List<ResidentialQuarters> residentialQuarters) {
            // 首先找到所有的顶级节点
            List<ResidentialQuarters> topLevel = residentialQuarters.stream()
                    .filter(menu -> StringUtils.isBlank(menu.getParentId()))
                    .collect(Collectors.toList());
    
            // 为每个顶级节点递归地填充子节点
            topLevel.forEach(topLevelMenu -> fillChildren(topLevelMenu, residentialQuarters));
    
            return topLevel;
        }
    
        private static void fillChildren(ResidentialQuarters parent, List<ResidentialQuarters> residentialQuarters) {
            List<ResidentialQuarters> children = residentialQuarters.stream()
                    .filter(menu -> menu.getParentId() != null && menu.getParentId().equals(parent.getId()))
                    .collect(Collectors.toList());
    
            // 递归填充子节点之前对子节点进行排序
            children.forEach(child -> fillChildren(child, residentialQuarters));
    
            Comparator<ResidentialQuarters> mixedComparator = (menu1, menu2) -> {
                String name1 = menu1.getQuartersName();
                String name2 = menu2.getQuartersName();
    
                // 检查两个name是否都是纯数字
                boolean isNumeric1 = name1.matches("\\d+");
                boolean isNumeric2 = name2.matches("\\d+");
    
                // 如果两个name都是纯数字,按照数值大小比较
                if (isNumeric1 && isNumeric2) {
                    return Integer.compare(Integer.parseInt(name1), Integer.parseInt(name2));
                }
                // 如果其中一个不是纯数字,按照字符串字典顺序比较
                return name1.compareTo(name2);
            };
    
           // 使用自定义的比较器进行排序
            children.sort(mixedComparator);
    
    
            //children.sort(Comparator.comparingInt(menu -> Integer.parseInt(menu.getQuartersName())));
    
            // 将排序后的子节点添加到父节点的子列表中
            children.forEach(parent::addChild);
        }
    本文著作权归作者 [ admin ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    首页邻居关于归档
    Copyright©2020-2026  All Rights Reserved.  Load:0.015 s
    京ICP备18019712号
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。