将List对象列表转为树形结构

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

1、SocialTag.java
  1. package com.nijia.vip.social.entity;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.baomidou.mybatisplus.annotation.IdType;
  5. import com.baomidou.mybatisplus.annotation.TableField;
  6. import com.baomidou.mybatisplus.annotation.TableId;
  7. import com.nijia.base.entity.BaseEntity;
  8. import io.swagger.annotations.ApiModelProperty;
  9. import lombok.Data;
  10. /**
  11. * 社交--个人标签(SocialTag)表实体类
  12. *
  13. * @author whp
  14. * @since 2022-06-23 14:15:53
  15. */
  16. @SuppressWarnings("serial")
  17. @Data
  18. public class SocialTag extends BaseEntity {
  19.     private static final long serialVersionUID = 1L;
  20.     @TableId(value = "id", type = IdType.ASSIGN_ID)
  21.     /**
  22.      * 主键
  23.      */
  24.     @ApiModelProperty("主键")
  25.     private Long id;
  26.     /**
  27.      * 标签名称
  28.      */
  29.     @ApiModelProperty("标签名称")
  30.     private String tagName;
  31.     /**
  32.      * 父级id
  33.      */
  34.     @ApiModelProperty("父级id")
  35.     private Long parentId;
  36.     /**
  37.      * 标签等级【1-1级,2-2级】
  38.      */
  39.     @ApiModelProperty("标签等级【1-1级,2-2级】")
  40.     private Integer levelNo;
  41.     /**
  42.      * 排序号
  43.      */
  44.     @ApiModelProperty("排序号")
  45.     private Integer sortNo;
  46.     /**
  47.      * 可用状态【1-可用,0-不可用】
  48.      */
  49.     @ApiModelProperty("可用状态【1-可用,0-不可用】")
  50.     private Integer enableFlag;
  51.     /**
  52.      * 删除标识【1-删除,0-正常】
  53.      */
  54.     @ApiModelProperty("删除标识【1-删除,0-正常】")
  55.     private Integer deleteFlag;
  56.     @TableField(exist=false)
  57.     private List<SocialTag> childSocialTagList = new ArrayList<SocialTag>();
  58. }
复制代码
 
2、SocialTagListToTreeTest.java
  1. package com.nijia.vip.service;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.stream.Collectors;
  7. import org.apache.commons.collections4.CollectionUtils;
  8. import com.nijia.test.BaseTest;
  9. import com.nijia.vip.social.entity.SocialTag;
  10. import io.geekidea.springbootplus.framework.util.JavaJsonConvert;
  11. public class SocialTagListToTreeTest extends BaseTest {
  12.    
  13.      public static void main(String[] args) {
  14.          List<SocialTag> resultList = convertListToTree(initData());
  15.          System.out.println(JavaJsonConvert.javaToJson(resultList));
  16.     }
  17.    
  18.      /**
  19.       * 将List对象列表转为树形结构
  20.       *
  21.       * @param socialTagList
  22.       * @return
  23.       */
  24.     private static List<SocialTag> convertListToTree(List<SocialTag> socialTagList) {
  25.         List<SocialTag> resultList = new ArrayList<SocialTag>();
  26.         if(CollectionUtils.isEmpty(socialTagList)) {
  27.             return resultList;
  28.         }
  29.         
  30.         //List 转为 Map
  31.          Map<Long, SocialTag> socialTagMap = socialTagList.stream().collect(Collectors.toMap(SocialTag::getId, item -> item));
  32.          for(SocialTag socialTag : socialTagList) {
  33.              SocialTag parentSocialTag = socialTagMap.get(socialTag.getParentId());
  34.              //该节点为空,说明是顶级节点
  35.              if(parentSocialTag == null) {
  36.                  // 将顶级节点加入结果集中
  37.                  resultList.add(socialTag);
  38.                  continue;
  39.              }
  40.             
  41.              // 把自己加到父节点对象里面去
  42.              parentSocialTag.getChildSocialTagList().add(socialTag);
  43.          }
  44.          
  45.         return resultList;
  46.     }
  47.     private static List<SocialTag> initData() {
  48.         List<SocialTag> socialTagList = new ArrayList<SocialTag>();
  49.         SocialTag socialTag = new SocialTag();
  50.         socialTag.setId(1L);
  51.         socialTag.setTagName("Java");
  52.         socialTag.setParentId(0L);
  53.         //标签等级【1-1级,2-2级】
  54.         socialTag.setLevelNo(1);
  55.         socialTag.setCreateTime(new Date());
  56.         socialTagList.add(socialTag);
  57.         
  58.         socialTag = new SocialTag();
  59.         socialTag.setId(10L);
  60.         socialTag.setTagName("Springboot");
  61.         socialTag.setParentId(1L);
  62.         //标签等级【1-1级,2-2级】
  63.         socialTag.setLevelNo(2);
  64.         socialTag.setCreateTime(new Date());
  65.         socialTagList.add(socialTag);
  66.         
  67.         socialTag = new SocialTag();
  68.         socialTag.setId(11L);
  69.         socialTag.setTagName("SpringCloud");
  70.         socialTag.setParentId(1L);
  71.         //标签等级【1-1级,2-2级】
  72.         socialTag.setLevelNo(2);
  73.         socialTag.setCreateTime(new Date());
  74.         socialTagList.add(socialTag);
  75.         
  76.         socialTag = new SocialTag();
  77.         socialTag.setId(2L);
  78.         socialTag.setTagName("DB");
  79.         socialTag.setParentId(0L);
  80.         //标签等级【1-1级,2-2级】
  81.         socialTag.setLevelNo(1);
  82.         socialTag.setCreateTime(new Date());
  83.         socialTagList.add(socialTag);
  84.         
  85.         socialTag = new SocialTag();
  86.         socialTag.setId(20L);
  87.         socialTag.setTagName("Mysql");
  88.         socialTag.setParentId(2L);
  89.         //标签等级【1-1级,2-2级】
  90.         socialTag.setLevelNo(2);
  91.         socialTag.setCreateTime(new Date());
  92.         socialTagList.add(socialTag);
  93.         
  94.         socialTag = new SocialTag();
  95.         socialTag.setId(21L);
  96.         socialTag.setTagName("Oracle");
  97.         socialTag.setParentId(2L);
  98.         //标签等级【1-1级,2-2级】
  99.         socialTag.setLevelNo(2);
  100.         socialTag.setCreateTime(new Date());
  101.         socialTagList.add(socialTag);
  102.         
  103.         socialTag = new SocialTag();
  104.         socialTag.setId(3L);
  105.         socialTag.setTagName("JS");
  106.         socialTag.setParentId(0L);
  107.         //标签等级【1-1级,2-2级】
  108.         socialTag.setLevelNo(1);
  109.         socialTag.setCreateTime(new Date());
  110.         socialTagList.add(socialTag);
  111.         
  112.         socialTag = new SocialTag();
  113.         socialTag.setId(30L);
  114.         socialTag.setTagName("VUE");
  115.         socialTag.setParentId(3L);
  116.         //标签等级【1-1级,2-2级】
  117.         socialTag.setLevelNo(2);
  118.         socialTag.setCreateTime(new Date());
  119.         socialTagList.add(socialTag);
  120.         
  121.         return socialTagList;
  122.     }
  123.    
  124. }
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表