• 递归 Stream流式 自关联递归


    1.测试实体类

    1. /**
    2. * @author : zhang sq
    3. * @date : 2022/7/30 9:54
    4. **/
    5. @Data
    6. @NoArgsConstructor
    7. @AllArgsConstructor
    8. @Builder
    9. public class Recursion implements Serializable {
    10. private int id;
    11. /**
    12. * 父id
    13. */
    14. private int parentId;
    15. /**
    16. * 名称
    17. */
    18. private String name;
    19. /**
    20. * 排序值
    21. */
    22. private int sort;
    23. /**
    24. * 创建时间
    25. */
    26. private Date createTime;
    27. private List childern;
    28. public Recursion(int id, int parentId, String name) {
    29. this.id = id;
    30. this.parentId = parentId;
    31. this.name = name;
    32. }
    33. public Recursion(int id, int parentId, String name, int sort, Date createTime) {
    34. this.id = id;
    35. this.parentId = parentId;
    36. this.name = name;
    37. this.sort = sort;
    38. this.createTime = createTime;
    39. }
    40. }

    2.测试代码

    1. /**
    2. * @author : zhang sq
    3. * @date : 2022/7/30 9:55
    4. **/
    5. public class Test {
    6. public static void main(String[] args) {
    7. //模拟测试数据
    8. List recursionlist = new ArrayList<>();
    9. Recursion re1 = new Recursion(1,0,"湖北省",1 ,new Date());
    10. Recursion re2 = new Recursion(2,1,"孝感市",3 ,new Date());
    11. Recursion re3 = new Recursion(3,2,"云梦县",2 ,new Date());
    12. Recursion re4 = new Recursion(4,3,"义堂镇",2 ,new Date());
    13. Recursion re5 = new Recursion(5,1,"武汉市",2 ,new Date());
    14. Recursion re6 = new Recursion(6,5,"江夏区",2 ,new Date());
    15. Recursion re7 = new Recursion(7,6,"佛祖岭",2 ,new Date());
    16. recursionlist.add(re1);recursionlist.add(re2);
    17. recursionlist.add(re3);recursionlist.add(re4);
    18. recursionlist.add(re5);recursionlist.add(re6);
    19. recursionlist.add(re7);
    20. //根据最外层数据递归
    21. re1.setChildern(Recursion(recursionlist, re1.getId()));
    22. System.out.println(JSON.toJSONString(re1));
    23. }
    24. /**
    25. * 递归 (常用于菜单 , 自关联的递归查询 )
    26. * @param recursionlist 所有的自关联数据
    27. * @param parentId 最外层的主键id
    28. * @return tree 树结构
    29. */
    30. private static List Recursion(List recursionlist, int parentId){
    31. List recursionlist2 = new ArrayList<>();
    32. Optional.ofNullable(recursionlist).orElse(new ArrayList<>())
    33. .stream()
    34. .filter(recursion -> recursion.getParentId()==parentId) //过滤 父id == 当前id的 ,(取当前下级)
    35. .forEach(recursion -> { //遍历下级存 List
    36. recursionlist2.add(
    37. Recursion.builder()
    38. .id(recursion.getId())
    39. .name(recursion.getName())
    40. .parentId(recursion.getParentId())
    41. .sort(recursion.getSort())
    42. .createTime(new Date())
    43. .childern(Recursion(recursionlist,recursion.getId()))
    44. .build());
    45. });
    46. //每次递归数据 进行排序处理
    47. List collect = Optional.ofNullable(recursionlist2).orElse(new ArrayList<>())
    48. .stream()
    49. .sorted(Comparator.comparing(Recursion::getSort) //根据sort排序.sort必须有值,不然会空指针
    50. .thenComparing(Recursion::getCreateTime))
    51. .collect(Collectors.toList());
    52. return collect;
    53. }
    54. }

  • 相关阅读:
    C语言链表详解
    目标检测YOLO实战应用案例100讲-机载SAR复杂场景目标高效检测方法研究(续)
    基于GPTs个性化定制SCI论文专业翻译器
    C语言学习之路(基础篇)—— 数据类型 01
    Chapter 6 Shell Logic and Arithmetic
    Hadoop HA (一) --------- HA 概述 与 HDFS-HA 集群搭建
    Linux简单命令之文件权限管理
    打破原则引入SQL,MongoDB到底想要干啥???
    短剧解说小程序搭建,短剧解说小程序源码
    #define 宏定义看这一篇文章就够了
  • 原文地址:https://blog.csdn.net/zhangshengqiang168/article/details/126069365