随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

将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;
    }

   
}
复制代码

 

posted on   Ruthless  阅读(708)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2013-06-25 jsoup、xpath教程
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示