1.测试实体类
- /**
- * @author : zhang sq
- * @date : 2022/7/30 9:54
- **/
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- @Builder
- public class Recursion implements Serializable {
-
- private int id;
-
- /**
- * 父id
- */
- private int parentId;
-
- /**
- * 名称
- */
- private String name;
-
- /**
- * 排序值
- */
- private int sort;
-
- /**
- * 创建时间
- */
- private Date createTime;
-
- private List
childern; -
- public Recursion(int id, int parentId, String name) {
- this.id = id;
- this.parentId = parentId;
- this.name = name;
- }
-
- public Recursion(int id, int parentId, String name, int sort, Date createTime) {
- this.id = id;
- this.parentId = parentId;
- this.name = name;
- this.sort = sort;
- this.createTime = createTime;
- }
- }
2.测试代码
- /**
- * @author : zhang sq
- * @date : 2022/7/30 9:55
- **/
- public class Test {
- public static void main(String[] args) {
- //模拟测试数据
- List
recursionlist = new ArrayList<>(); - Recursion re1 = new Recursion(1,0,"湖北省",1 ,new Date());
- Recursion re2 = new Recursion(2,1,"孝感市",3 ,new Date());
- Recursion re3 = new Recursion(3,2,"云梦县",2 ,new Date());
- Recursion re4 = new Recursion(4,3,"义堂镇",2 ,new Date());
- Recursion re5 = new Recursion(5,1,"武汉市",2 ,new Date());
- Recursion re6 = new Recursion(6,5,"江夏区",2 ,new Date());
- Recursion re7 = new Recursion(7,6,"佛祖岭",2 ,new Date());
- recursionlist.add(re1);recursionlist.add(re2);
- recursionlist.add(re3);recursionlist.add(re4);
- recursionlist.add(re5);recursionlist.add(re6);
- recursionlist.add(re7);
-
- //根据最外层数据递归
- re1.setChildern(Recursion(recursionlist, re1.getId()));
- System.out.println(JSON.toJSONString(re1));
-
- }
-
- /**
- * 递归 (常用于菜单 , 自关联的递归查询 )
- * @param recursionlist 所有的自关联数据
- * @param parentId 最外层的主键id
- * @return tree 树结构
- */
- private static List
Recursion(List recursionlist, int parentId) { - List
recursionlist2 = new ArrayList<>(); - Optional.ofNullable(recursionlist).orElse(new ArrayList<>())
- .stream()
- .filter(recursion -> recursion.getParentId()==parentId) //过滤 父id == 当前id的 ,(取当前下级)
- .forEach(recursion -> { //遍历下级存 List
- recursionlist2.add(
- Recursion.builder()
- .id(recursion.getId())
- .name(recursion.getName())
- .parentId(recursion.getParentId())
- .sort(recursion.getSort())
- .createTime(new Date())
- .childern(Recursion(recursionlist,recursion.getId()))
- .build());
- });
-
- //每次递归数据 进行排序处理
- List
collect = Optional.ofNullable(recursionlist2).orElse(new ArrayList<>()) - .stream()
- .sorted(Comparator.comparing(Recursion::getSort) //根据sort排序.sort必须有值,不然会空指针
- .thenComparing(Recursion::getCreateTime))
- .collect(Collectors.toList());
-
- return collect;
- }
- }