Java 构建树型结构

简介: Java 构建树型结构

Java 构建树型结构

常见需求

  1. 菜单导航
  2. 层叠列表
  3. 权限树

构建思路

编写两个POJO: Item、和 创建树型的ItemTree。通过以下过程实现:

  1. 根据标示,获取所有根节点.
  2. 为根节点建立次级节点并拼接上.
  3. 递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”

代码

1.ItemMenu 存储每个节点相关的属性
import java.util.List;
/**
 * @author : Jay
 * @description : 节点对象
 * @date : 2021-07-14 09:24
 **/
public class Item {
    /**
     * ID
     */
    private String id;
    /**
     * 父节点ID
     */
    private String parentId;
    /**
     * 节点名称
     */
    private String text;
    /**
     * 子节点集合
     */
    private List<Item> children;
    public Item(String id, String parentId, String text) {
        this.id=id;
        this.parentId=parentId;
        this.text=text;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getParentId() {
        return parentId;
    }
    public void setParentId(String parentId) {
        this.parentId = parentId;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
    public List<Item> getChildren() {
        return children;
    }
    public void setChildren(List<Item> children) {
        this.children = children;
    }
    @Override
    public String toString() {
        return "Menu{" +
                "id='" + id + '\'' +
                ", parentId='" + parentId + '\'' +
                ", text='" + text + '\'' +
                ", children=" + children +
                '}';
    }
}
2.树, 用于构建树使用的POJO
import java.util.ArrayList;
import java.util.List;
/**
 * @author : Jay
 * @description : 树
 * @date : 2021-07-14 09:27
 **/
public class ItemTree {
    /**
     * 所有菜单集合,构建成树形结构前
     */
    private List<Item> itemList = new ArrayList<Item>();
    public ItemTree(List<Item> itemList) {
        this.itemList = itemList;
    }
    /**
     * 构建树形结构
     */
    public List<Item> buildTree(){
        List<Item> treeItems = new ArrayList<Item>();
        //遍历根节点
        for(Item itemNode : getRootNode()) {
            //递归处理每一个根节点
            itemNode = buildChildTree(itemNode);
            treeItems.add(itemNode);
        }
        return treeItems;
    }
    /**
     * 递归,建立子树形结构
     * @param parentNode 父节点
     * @return 构建后的父节点
     */
    private Item buildChildTree(Item parentNode){
        List<Item> childItems = new  ArrayList<Item>();
        for(Item itemNode : itemList) {
            // 当前节点的父节点ID等于传入的父节点,则放入子节点集合中
            if(itemNode.getParentId().equals(parentNode.getId())) {
                childItems.add(buildChildTree(itemNode));
            }
        }
        parentNode.setChildren(childItems);
        return parentNode;
    }
    /**
     * 获取根节点(父节点ID为0)
     */
    private List<Item> getRootNode() {
        List<Item> rootItemLists = new ArrayList<Item>();
        for(Item itemNode : itemList) {
            //当节点的父节点为0,则为根节点
            if(itemNode.getParentId().equals("0")) {
                rootItemLists.add(itemNode);
            }
        }
        return rootItemLists;
    }
    @Override
    public String toString() {
        return "ItemTree{" +
                "itemList=" + itemList +
                '}';
    }
}
3.测试
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
 * @author : Jay
 * @description : 树形结构测试类
 * @date : 2021-07-14 09:58
 **/
public class TreeDemo {
    public static void main(String[] args) {
        List<Item> itemList = new ArrayList<Item>();
        //模拟数据
        itemList.add(new Item("GN001D000","0","系统管理"));
        itemList.add(new Item("GN001D100","GN001D000","权限管理"));
        itemList.add(new Item("GN001D110","GN001D100","密码修改"));
        itemList.add(new Item("GN001D120","GN001D100","新加用户"));
        itemList.add(new Item("GN001D200","GN001D000","系统监控"));
        itemList.add(new Item("GN001D210","GN001D200","在线用户"));
        itemList.add(new Item("GN002D000","0","订阅区"));
        itemList.add(new Item("GN003D000","0","未知领域"));
        //创建树
        ItemTree itemTree = new ItemTree(itemList);
        //构建树
        itemList = itemTree.buildTree();
        String jsonOutput= JSONObject.toJSONString(itemList);
        System.out.println(jsonOutput);
    }
}
4.测试结果
[
    {
        "children":[
            {
                "children":[
                    Object{...},
                    Object{...}
                ],
                "id":"GN001D100",
                "parentId":"GN001D000",
                "text":"权限管理",
                "url":"/admin",
                "yxbz":"Y"
            },
            {
                "children":[
                    {
                        "children":[
                        ],
                        "id":"GN001D210",
                        "parentId":"GN001D200",
                        "text":"在线用户",
                        "url":"/admin",
                        "yxbz":"Y"
                    }
                ],
                "id":"GN001D200",
                "parentId":"GN001D000",
                "text":"系统监控",
                "url":"/admin",
                "yxbz":"Y"
            }
        ],
        "id":"GN001D000",
        "parentId":"0",
        "text":"系统管理",
        "url":"/admin",
        "yxbz":"Y"
    },
    {
        "children":[
        ],
        "id":"GN002D000",
        "parentId":"0",
        "text":"订阅区",
        "url":"/admin",
        "yxbz":"Y"
    },
    {
        "children":[
        ],
        "id":"GN003D000",
        "parentId":"0",
        "text":"未知领域",
        "url":"/admin",
        "yxbz":"Y"
    }
]
5.完成

关注公众号:熊猫Jay字节之旅,了解更多 AI 技巧 ~


相关文章
|
1月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
204 3
|
2月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
801 1
|
3月前
|
数据采集 搜索推荐 Java
Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用(221)
本文探讨 Java 大数据在智能教育虚拟学习环境中的应用,涵盖多源数据采集、个性化推荐、实时互动优化等核心技术,结合实际案例分析其在提升学习体验与教学质量中的成效,并展望未来发展方向与技术挑战。
|
2月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
1220 58
|
1月前
|
人工智能 缓存 自然语言处理
Java与多模态AI:构建支持文本、图像和音频的智能应用
随着大模型从单一文本处理向多模态能力演进,现代AI应用需要同时处理文本、图像、音频等多种信息形式。本文深入探讨如何在Java生态中构建支持多模态AI能力的智能应用。我们将完整展示集成视觉模型、语音模型和语言模型的实践方案,涵盖从文件预处理、多模态推理到结果融合的全流程,为Java开发者打开通往下一代多模态AI应用的大门。
282 41
|
5月前
|
自然语言处理 前端开发 Java
JBoltAI 框架完整实操案例 在 Java 生态中快速构建大模型应用全流程实战指南
本案例基于JBoltAI框架,展示如何快速构建Java生态中的大模型应用——智能客服系统。系统面向电商平台,具备自动回答常见问题、意图识别、多轮对话理解及复杂问题转接人工等功能。采用Spring Boot+JBoltAI架构,集成向量数据库与大模型(如文心一言或通义千问)。内容涵盖需求分析、环境搭建、代码实现(知识库管理、核心服务、REST API)、前端界面开发及部署测试全流程,助你高效掌握大模型应用开发。
562 5
|
23天前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
195 8
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
127 10
|
1月前
|
人工智能 Java 物联网
Java与边缘AI:构建离线智能的物联网与移动应用
随着边缘计算和终端设备算力的飞速发展,AI推理正从云端向边缘端迁移。本文深入探讨如何在资源受限的边缘设备上使用Java构建离线智能应用,涵盖从模型优化、推理加速到资源管理的全流程。我们将完整展示在Android设备、嵌入式系统和IoT网关中部署轻量级AI模型的技术方案,为构建真正实时、隐私安全的边缘智能应用提供完整实践指南。
235 3
|
1月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
328 4