Java小程序:list和tree相互转换

废话不多讲,直接上代码

public class TreeDTO {
    private String id;
    private String parentId;
    private String name;

    private List<TreeDTO> children;
    public TreeDTO() {  }
    public TreeDTO(String id,String parentId,String name) {
        this.id = id;
        this.name= name;
        this.parentId=parentId;
    }
    //setters getters
    @Override
    public String toString() {
        return this.id+","+this.parentId+","+this.name;
    }   
}

public class TreeListConvertDemo {      
    public static void main(String[] args) {
        List<TreeDTO> list = new ArrayList<TreeDTO>();
        list.add(new TreeDTO("1",null,"中国"));
        list.add(new TreeDTO("2","1","广东"));
        list.add(new TreeDTO("3","2","广州"));
        list.add(new TreeDTO("4","2","深圳"));
        list.add(new TreeDTO("5","3","越秀"));
        list.add(new TreeDTO("6","3","天河"));
        list.add(new TreeDTO("7","4","福田"));
        list.add(new TreeDTO("8","4","南山"));
        list.add(new TreeDTO("9","4","罗湖"));
        list.add(new TreeDTO("10","1","河南"));
        list.add(new TreeDTO("11","10","郑州"));
        list.add(new TreeDTO("12","11","二七"));  
        List<TreeDTO> trees = list2tree(list);
        System.out.println(trees.size());
        List<TreeDTO> list2 = new ArrayList<>();  
        tree2list(trees.get(0),list2,null);
        System.out.println(list2.size());
    }

    //Tree转list
    public static void tree2list(TreeDTO root,List<TreeDTO> list,String parentId){
        if (root == null) {
            return ;
        }
//      TreeDTO d = new TreeDTO(UUIDUtil.getId(),parentId,root.getName());
        TreeDTO d = new TreeDTO(root.getId(),parentId,root.getName());
        list.add(d);
        if (root.getChildren()==null){
            return;
        }
        for (TreeDTO sub:root.getChildren()){
            tree2list(sub, list, d.getId());
        }       
    }

    //list转Tree
    public static List<TreeDTO> list2tree(List<TreeDTO> srclist){       
        List<TreeDTO> trees = new ArrayList<TreeDTO>();
        for (TreeDTO t1:srclist){
            boolean isRoot = true;
            for (TreeDTO t2:srclist){
                if (t1.getParentId()!=null&&t1.getParentId().equals(t2.getId())){
                    isRoot = false;
                    if (t2.getChildren()==null){
                        t2.setChildren(new ArrayList<TreeDTO>());
                    }
                    t2.getChildren().add(t1);
                    break;
                }
            }
            if (isRoot){
                trees.add(t1);
            }
        }
        return trees;
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值