zoukankan      html  css  js  c++  java
  • 递归构造树

    @Data
    @NoArgsConstructor
    public class Foo {
    
        private Integer id;
    
        private Integer parentId;
    
        private List<Foo> children;
    
        public Foo(Integer id, Integer parentId) {
            this.id = id;
            this.parentId = parentId;
        }
    }
    public class FooTest {
    
        public static  Foo BuildTree(List<Foo> fooList){
            Foo root = new Foo();
            fooList.forEach(item ->{
                if(item.getParentId() == 0){
                    root.setId(item.getId());
                    root.setParentId(0);
                    root.setChildren(getChild(item.getId(),fooList));
                }
            });
            return root;
        }
        private static List<Foo> getChild(Integer id, List<Foo> fooList) {
            List<Foo> child = Lists.newArrayList();
            fooList.forEach(item->{
                if(item.getParentId() == id){
                    child.add(item);
                }
            });
            child.forEach(item ->{
                item.setChildren(getChild(item.getId(),fooList));
            });
            if(CollectionUtils.isEmpty(child)){
                return new ArrayList<Foo>();
            }
            return child;
        }
    
        public static void main(String[] args) {
            List<Foo> list = new ArrayList<>();
            list.add(new Foo(1,0));
            list.add(new Foo(2,1));
            list.add(new Foo(3,1));
            list.add(new Foo(4,1));
            list.add(new Foo(5,2));
            list.add(new Foo(6,3));
            Foo foo = BuildTree(list);
            System.out.println(foo);
        }
    }

    result:

    Foo(id=1, parentId=0, children=[Foo(id=2, parentId=1, children=[Foo(id=5, parentId=2, children=[])]), Foo(id=3, parentId=1, children=[Foo(id=6, parentId=3, children=[])]), Foo(id=4, parentId=1, children=[])])

  • 相关阅读:
    开启和禁用Wifi热点命令
    C# IE代理操作
    Asp.net QueryString批量插入和更新
    Asp.net 插入或更改查询字符串
    C#如何判断线程池中所有的线程是否已经完成之Demo
    mysql 安装及设置密码
    c# iis回收应用程序池
    判断是否为移动端
    rtmp,m3u8 直播地址
    byte数组转换为字符串
  • 原文地址:https://www.cnblogs.com/enchaolee/p/11712308.html
Copyright © 2011-2022 走看看