java 遍历数组生成 树状结构

    技术2023-07-29  106

    public static void main(String[] args) { List<Demo> node = new ArrayList<Demo>(); node.add(new Demo("1", "0", "吉林省", new ArrayList<Demo>())); node.add(new Demo("2", "1", "長春市", new ArrayList<Demo>())); node.add(new Demo("3", "1", "松原市", new ArrayList<Demo>())); node.add(new Demo("4", "0", "遼寧省", new ArrayList<Demo>())); node.add(new Demo("5", "4", "沈陽市", new ArrayList<Demo>())); node.add(new Demo("6", "3", "扶余县", new ArrayList<Demo>())); Map<String, Demo> maps = new HashMap<>(); // 创建 map id 为键,值为该对象 node.forEach(e -> { maps.put(e.getId() + "", e); }); //Map<String, Demo> maps = node.stream().collect(Collectors.toMap(Demo :: getId, demo -> demo)); List<Demo> nodes = new ArrayList<Demo>(); // 遍历数组 node.forEach(e -> { Demo demo = maps.get(e.getPid()); // 通过pid 父级id获取map值,有值说明不是顶级节点,没有是顶级节点,放入到nodes 中 if (demo != null) { maps.get(e.getPid()).getChild().add(e); } else { nodes.add(e); } }); System.out.println(nodes); }
    实体类
    /** * @Title: Demo.java * @Package javaDemo.demoTest * @Description: TODO(用一句话描述该文件做什么) * @author dongwei_qi * @date 2020年7月3日 下午1:33:31 * @version V1.0 */ package javaDemo.demoTest; import java.util.List; /** * @ClassName: Demo * @Description: TODO(这里用一句话描述这个类的作用) * @author dongwei_qi * @date 2020年7月3日 * */ public class Demo { private String id; private String pid; private String name; private List<Demo> child; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Demo> getChild() { return child; } public void setChild(List<Demo> child) { this.child = child; } public Demo(String id,String pid,String name,List<Demo> child) { this.id = id; this.pid = pid; this.name = name; this.child = child; } @Override public String toString() { return "Demo [id=" + id + ", pid=" + pid + ", name=" + name + ", child=" + child + "]"; } }
    Processed: 0.012, SQL: 9