JAVA构建List集合为树形结构的方法和代码

简介: JAVA构建List集合为树形结构的方法和代码

package com.zving.tree;

import java.util.ArrayList;
import java.util.List;
/**

  • 树形结构实体类
  • @author clove
    */
    public class Node {
    private int id;
    private int pid;
    private String name;
    private String type;
    private List children = new ArrayList<>();
    public Node(int id, int pid) {
     this.id = id;
     this.pid = pid;
    

//代码效果参考:http://www.zidongmutanji.com/zsjx/43551.html

public Node(int id, int pid, String name, String type) {
    this(id, pid);
    this.name = name;
    this.type = type;
public int getId() {
    return id;
public void setId(int id) {
public int getPid() {
    return pid;
public void setPid(int pid) {
public String getName() {
    return name;
public void setName(String name) {
public String getType() {
    return type;
public void setType(String type) {
public List<Node> getChildren() {
    return children;
public void setChildren(List<Node> children) {
    this.children = children;

}  

复制代码
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TreeController {
@RequestMapping("/tree")
public List getTree() {
List nodeList = getNodeList();
List tree = buildTree(nodeList);
return tree;
// 初始化数据集合
private List getNodeList() {
List list = new ArrayList();
Node node1 = new Node(1, 0, "公司库", "股票");
Node node2 = new Node(2, 0, "基金库", "基金");
Node node3 = new Node(111, 1, "A股市场", "股票");
Node node4 = new Node(112, 1, "港股市场", "股票");
Node node5 = new Node(211, 2, "公墓基金池", "基金");
Node node6 = new Node(212, 2, "非公墓基金池", "基金");
Node node7 = new Node(11111, 111, "基础池", "股票");
Node node8 = new Node(21211, 212, "可买池", "基金");
list.add(node1);
list.add(node2);
list.add(node3);
list.add(node4);
list.add(node5);
list.add(node6);
list.add(node7);
list.add(node8);
return list;

//代码效果参考:http://www.zidongmutanji.com/zsjx/267563.html
// 封装集合为树形结构
private List buildTree(List nodes) {
Map> children = nodes.stream().filter(node -> node.getPid() != 0)
.collect(Collectors.groupingBy(node -> node.getPid()));
nodes.forEach(node -> node.setChildren(children.get(node.getId())));
return nodes.stream().filter(node -> node.getPid() == 0).collect(Collectors.toList());

相关文章
|
18小时前
|
存储 安全 Java
JAVA泛型大揭秘:如何在编译时守护你的代码安全?
【6月更文挑战第28天】Java泛型是JDK 5引入的特性,用于提升代码复用和类型安全性。通过类型参数如`&lt;T&gt;`,泛型在编译时确保数据类型的正确性。例如,泛型类`GenericList&lt;T&gt;`允许创建特定类型的列表,如`GenericList&lt;String&gt;`,阻止了不兼容类型元素的添加,防止运行时ClassCastException。泛型方法如`swap()`也确保了操作的类型安全,增强了代码的可读性和维护性。
|
1天前
|
人工智能 算法 Java
Java进阶代码的具体写法
Java进阶代码的具体写法
|
1天前
|
Java
Java中代码块区别及代码示例
Java中代码块区别及代码示例
|
1天前
|
存储 Java 容器
【JAVA集合篇 - LinkedList】你真的了解LinkedList吗?
【JAVA集合篇 - LinkedList】你真的了解LinkedList吗?
6 0
|
1天前
|
Java
【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?
【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?
2 0
|
1天前
|
Java API
Java代码如何将时间戳转换为时间
【6月更文挑战第27天】Java代码如何将时间戳转换为时间
4 0
|
1天前
|
存储 安全 Java
Java文件操作,让你的代码更“有型”!读写、复制、删除全解析!
【6月更文挑战第27天】在Java中进行文件操作是程序基础功能之一,涉及读写、复制和删除。使用`FileReader/FileWriter`进行文本文件的读写,如示例所示,通过`try-with-resources`保证资源释放。文件复制利用`FileInputStream/FileOutputStream`,而删除文件则依赖`File`的`delete()`方法,确保条件安全执行。这些标准库类提供了高效且健壮的文件管理能力。
|
1天前
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
5 1
|
30天前
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
26 1
|
30天前
|
存储 Java
Java中带返回值方法的定义与调用技术
Java中带返回值方法的定义与调用技术
25 1