List列表转成树,并且根据名称排序 Published on Mar 8, 2024 in Java with 0 comment List列表转成树前提是数据有panrentid能找到上级,并且根据名称排序 ```java public static List buildTree(List residentialQuarters) { // 首先找到所有的顶级节点 List 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) { List children = residentialQuarters.stream() .filter(menu -> menu.getParentId() != null && menu.getParentId().equals(parent.getId())) .collect(Collectors.toList()); // 递归填充子节点之前对子节点进行排序 children.forEach(child -> fillChildren(child, residentialQuarters)); Comparator 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 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。