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


    1、SocialTag.java

    package com.nijia.vip.social.entity;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.nijia.base.entity.BaseEntity;
    
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    /**
     * 社交--个人标签(SocialTag)表实体类
     *
     * @author whp
     * @since 2022-06-23 14:15:53
     */
    @SuppressWarnings("serial")
    @Data
    public class SocialTag extends BaseEntity {
        private static final long serialVersionUID = 1L;
    
        @TableId(value = "id", type = IdType.ASSIGN_ID)
        /**
         * 主键
         */
        @ApiModelProperty("主键")
        private Long id;
    
        /**
         * 标签名称
         */
        @ApiModelProperty("标签名称")
        private String tagName;
    
        /**
         * 父级id
         */
        @ApiModelProperty("父级id")
        private Long parentId;
    
        /**
         * 标签等级【1-1级,2-2级】
         */
        @ApiModelProperty("标签等级【1-1级,2-2级】")
        private Integer levelNo;
    
        /**
         * 排序号
         */
        @ApiModelProperty("排序号")
        private Integer sortNo;
    
        /**
         * 可用状态【1-可用,0-不可用】
         */
        @ApiModelProperty("可用状态【1-可用,0-不可用】")
        private Integer enableFlag;
    
        /**
         * 删除标识【1-删除,0-正常】
         */
        @ApiModelProperty("删除标识【1-删除,0-正常】")
        private Integer deleteFlag;
    
        @TableField(exist=false)
        private List<SocialTag> childSocialTagList = new ArrayList<SocialTag>();
    
    
    }

    2、SocialTagListToTreeTest.java

    package com.nijia.vip.service;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    import org.apache.commons.collections4.CollectionUtils;
    
    import com.nijia.test.BaseTest;
    import com.nijia.vip.social.entity.SocialTag;
    
    import io.geekidea.springbootplus.framework.util.JavaJsonConvert;
    
    
    public class SocialTagListToTreeTest extends BaseTest {
        
         public static void main(String[] args) {
             List<SocialTag> resultList = convertListToTree(initData());
             System.out.println(JavaJsonConvert.javaToJson(resultList));
        }
    
        
         /**
          * 将List对象列表转为树形结构
          * 
          * @param socialTagList
          * @return
          */
        private static List<SocialTag> convertListToTree(List<SocialTag> socialTagList) {
            List<SocialTag> resultList = new ArrayList<SocialTag>();
            if(CollectionUtils.isEmpty(socialTagList)) {
                return resultList;
            }
            
            //List 转为 Map
             Map<Long, SocialTag> socialTagMap = socialTagList.stream().collect(Collectors.toMap(SocialTag::getId, item -> item));
             for(SocialTag socialTag : socialTagList) {
                 SocialTag parentSocialTag = socialTagMap.get(socialTag.getParentId());
                 //该节点为空,说明是顶级节点
                 if(parentSocialTag == null) {
                     // 将顶级节点加入结果集中
                     resultList.add(socialTag);
                     continue;
                 }
                 
                 // 把自己加到父节点对象里面去
                 parentSocialTag.getChildSocialTagList().add(socialTag);
             }
             
            return resultList;
        }
    
        private static List<SocialTag> initData() {
            List<SocialTag> socialTagList = new ArrayList<SocialTag>();
            SocialTag socialTag = new SocialTag();
            socialTag.setId(1L);
            socialTag.setTagName("Java");
            socialTag.setParentId(0L);
            //标签等级【1-1级,2-2级】
            socialTag.setLevelNo(1);
            socialTag.setCreateTime(new Date());
            socialTagList.add(socialTag);
            
            socialTag = new SocialTag();
            socialTag.setId(10L);
            socialTag.setTagName("Springboot");
            socialTag.setParentId(1L);
            //标签等级【1-1级,2-2级】
            socialTag.setLevelNo(2);
            socialTag.setCreateTime(new Date());
            socialTagList.add(socialTag);
            
            socialTag = new SocialTag();
            socialTag.setId(11L);
            socialTag.setTagName("SpringCloud");
            socialTag.setParentId(1L);
            //标签等级【1-1级,2-2级】
            socialTag.setLevelNo(2);
            socialTag.setCreateTime(new Date());
            socialTagList.add(socialTag);
            
            socialTag = new SocialTag();
            socialTag.setId(2L);
            socialTag.setTagName("DB");
            socialTag.setParentId(0L);
            //标签等级【1-1级,2-2级】
            socialTag.setLevelNo(1);
            socialTag.setCreateTime(new Date());
            socialTagList.add(socialTag);
            
            socialTag = new SocialTag();
            socialTag.setId(20L);
            socialTag.setTagName("Mysql");
            socialTag.setParentId(2L);
            //标签等级【1-1级,2-2级】
            socialTag.setLevelNo(2);
            socialTag.setCreateTime(new Date());
            socialTagList.add(socialTag);
            
            socialTag = new SocialTag();
            socialTag.setId(21L);
            socialTag.setTagName("Oracle");
            socialTag.setParentId(2L);
            //标签等级【1-1级,2-2级】
            socialTag.setLevelNo(2);
            socialTag.setCreateTime(new Date());
            socialTagList.add(socialTag);
            
            socialTag = new SocialTag();
            socialTag.setId(3L);
            socialTag.setTagName("JS");
            socialTag.setParentId(0L);
            //标签等级【1-1级,2-2级】
            socialTag.setLevelNo(1);
            socialTag.setCreateTime(new Date());
            socialTagList.add(socialTag);
            
            socialTag = new SocialTag();
            socialTag.setId(30L);
            socialTag.setTagName("VUE");
            socialTag.setParentId(3L);
            //标签等级【1-1级,2-2级】
            socialTag.setLevelNo(2);
            socialTag.setCreateTime(new Date());
            socialTagList.add(socialTag);
            
            return socialTagList;
        }
    
       
    }
  • 相关阅读:
    全世界最好听的钢琴曲
    清华“70后”院长刘云浩——生命在于运动,梦想从未止步 | 新“清”年特辑
    Android---60---Notification 通知栏的简单使用
    面向对象的三大特性
    一道淘汰85%面试者的百度开发人员面试题?
    Linux下基于Erlang的高并发TCP连接压力实验
    2014南瑞暑期实习面试笔试经历
    Oracle cloud control 12c 怎样改动sysmanpassword
    JEECG社区 一个微信教育站点案例源代码分享
    stm32智能小车之路之小车启动
  • 原文地址:https://www.cnblogs.com/linjiqin/p/16411116.html
Copyright © 2020-2023  润新知