List列表转成树,并且根据名称排序

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);
    }
版权声明 ▶ 本网站名称:我的学习笔记
▶ 本文链接:https://ooolo.net/article/418.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!!

none
最后修改于:2024年03月12日 09:00

添加新评论

icon_mrgreen.pngicon_neutral.pngicon_twisted.pngicon_arrow.pngicon_eek.pngicon_smile.pngicon_confused.pngicon_cool.pngicon_evil.pngicon_biggrin.pngicon_idea.pngicon_redface.pngicon_razz.pngicon_rolleyes.pngicon_wink.pngicon_cry.pngicon_surprised.pngicon_lol.pngicon_mad.pngicon_sad.pngicon_exclaim.pngicon_question.png