Java将list转换为tree,多层次业务需求

@[TOC](Java将list转换为tree,多层次业务需求)


1、这里用了两种方式实现了Java List转换为tree

2、这种方式基本上能够满足多层次用户的业务需求

package com;

/**
 * @ClassName PersonTreeBuilder
 * @Author ERIKSYANG
 * @Date 2021/1/8
 */

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class PersonTreeBuilder {
    /**
     * realization of Two loop layers
     * @param personTreeNodes list of incoming tree nodes
     * @return trees
     */
    public static List<PersonTreeNode> bulid(List<PersonTreeNode> personTreeNodes) {
        List<PersonTreeNode> trees = new ArrayList<>();
        for (PersonTreeNode node : personTreeNodes) {
            //
            if ( node.getParentId().compareTo(0L) == 0 ) {
                trees.add(node);
            }
            for (PersonTreeNode nodeChild : personTreeNodes) {
                if (nodeChild.getParentId().compareTo(node.getId()) == 0) {
                    if (node.getChildren() == null) {
                        node.setChildren( new ArrayList<>());
                    }
                    node.getChildren().add(nodeChild);
                }
            }
        }
        return trees;
    }

    /**
     * use recursive method to build tree
     * @param personTreeNodes list of incoming tree nodes
     * @return trees
     */
    public static List<PersonTreeNode> buildByRecursive(List<PersonTreeNode> personTreeNodes) {
        List<PersonTreeNode> trees = new ArrayList<>();
        for (PersonTreeNode node : personTreeNodes) {
            if ( node.getParentId().compareTo(0L) == 0) {
                trees.add(findChildren(node,personTreeNodes));
            }
        }
        return trees;
    }

    /**
     * recursively finding child nodes
     * @param personTreeNode incoming tree node
     * @param personTreeNodes List of incoming tree nodes
     * @return personTreeNode
     */
    public static PersonTreeNode findChildren(PersonTreeNode personTreeNode, List<PersonTreeNode> personTreeNodes) {
        for (PersonTreeNode nodeChild : personTreeNodes) {
            if(personTreeNode.getId().compareTo(nodeChild.getParentId()) == 0) {
                if (personTreeNode.getChildren() == null) {
                    personTreeNode.setChildren( new ArrayList<>());
                }
                personTreeNode.getChildren().add(findChildren(nodeChild,personTreeNodes));
            }
        }
        return personTreeNode;
    }

    static void test1(){
        PersonTreeNode node1 = new PersonTreeNode( 1L, "爷爷", 0L);
        PersonTreeNode node2 = new PersonTreeNode( 2L, "外公", 0L);
//        PersonTreeNode node3 = new PersonTreeNode( 3L, "爸爸",node1);
//        PersonTreeNode node4 = new PersonTreeNode( 4L, "二叔",node1);
//        PersonTreeNode node5 = new PersonTreeNode( 5L, "三叔",node1);
//        PersonTreeNode node6 = new PersonTreeNode( 6L, "弟弟",node3);
//        PersonTreeNode node7 = new PersonTreeNode( 7L, "侄儿",node6);
//        PersonTreeNode node8 = new PersonTreeNode( 8L, "妈妈",node2);
//        PersonTreeNode node9 = new PersonTreeNode( 9L, "姨妈",node2);
//        PersonTreeNode node10 = new PersonTreeNode( 10L, "我",node8);
//        PersonTreeNode node11 = new PersonTreeNode( 11L, "儿子",node10);
        PersonTreeNode node3 = new PersonTreeNode( 3L, "爸爸",1L);
        PersonTreeNode node4 = new PersonTreeNode( 4L, "二叔",1L);
        PersonTreeNode node5 = new PersonTreeNode( 5L, "三叔",1L);
        PersonTreeNode node6 = new PersonTreeNode( 6L, "弟弟",3L);
        PersonTreeNode node7 = new PersonTreeNode( 7L, "侄儿",6L);
        PersonTreeNode node8 = new PersonTreeNode( 8L, "妈妈",2L);
        PersonTreeNode node9 = new PersonTreeNode( 9L, "姨妈",2L);
        PersonTreeNode node10 = new PersonTreeNode( 10L, "我",8L);
        PersonTreeNode node11 = new PersonTreeNode( 11L, "儿子",10L);
        List<PersonTreeNode> list = new ArrayList<>();
        list.add(node1);
        list.add(node2);
        list.add(node3);
        list.add(node4);
        list.add(node5);
        list.add(node6);
        list.add(node7);
        list.add(node8);
        list.add(node9);
        list.add(node10);
        list.add(node11);

//        String string = JSON.toJSONString(list, SerializerFeature.WriteMapNullValue);
        String string = JSON.toJSONString(list);
        System.out.println(string);
        List<PersonTreeNode> forLoops = PersonTreeBuilder.bulid(list);
        System.out.println(forLoops);
        String s1 = JSON.toJSONString(forLoops);
        System.out.println(s1);
//        List<PersonTreeNode> recursives = PersonTreeBuilder.buildByRecursive(list);
//        System.out.println(recursives);
//        String s = JSON.toJSONString(recursives);
//        System.out.println(s);
    }

    static void test2(){
//        String s = "[{\"id\":1,\"name\":\"爷爷\",\"parentId\":0},{\"id\":2,\"name\":\"外公\",\"parentId\":0},{\"id\":3,\"name\":\"爸爸\",\"parentId\":1},{\"id\":4,\"name\":\"二叔\",\"parentId\":1},{\"id\":5,\"name\":\"三叔\",\"parentId\":1},{\"id\":6,\"name\":\"弟弟\",\"parentId\":3},{\"id\":7,\"name\":\"侄儿\",\"parentId\":6},{\"id\":8,\"name\":\"妈妈\",\"parentId\":2},{\"id\":9,\"name\":\"姨妈\",\"parentId\":2},{\"id\":10,\"name\":\"我\",\"parentId\":8},{\"id\":11,\"name\":\"儿子\",\"parentId\":10}]";
//        String s = "[{\"children\":null,\"id\":1,\"name\":\"爷爷\",\"parentId\":0},{\"children\":null,\"id\":2,\"name\":\"外公\",\"parentId\":0},{\"children\":null,\"id\":3,\"name\":\"爸爸\",\"parentId\":1},{\"children\":null,\"id\":4,\"name\":\"二叔\",\"parentId\":1},{\"children\":null,\"id\":5,\"name\":\"三叔\",\"parentId\":1},{\"children\":null,\"id\":6,\"name\":\"弟弟\",\"parentId\":3},{\"children\":null,\"id\":7,\"name\":\"侄儿\",\"parentId\":6},{\"children\":null,\"id\":8,\"name\":\"妈妈\",\"parentId\":2},{\"children\":null,\"id\":9,\"name\":\"姨妈\",\"parentId\":2},{\"children\":null,\"id\":10,\"name\":\"我\",\"parentId\":8},{\"children\":null,\"id\":11,\"name\":\"儿子\",\"parentId\":10}]";
        String s = "[{\"children\":[{\"children\":[{\"children\":[{\"id\":7,\"name\":\"侄儿\",\"parentId\":6}],\"id\":6,\"name\":\"弟弟\",\"parentId\":3}],\"id\":3,\"name\":\"爸爸\",\"parentId\":1},{\"id\":4,\"name\":\"二叔\",\"parentId\":1},{\"id\":5,\"name\":\"三叔\",\"parentId\":1}],\"id\":1,\"name\":\"爷爷\",\"parentId\":0},{\"children\":[{\"children\":[{\"children\":[{\"id\":11,\"name\":\"儿子\",\"parentId\":10}],\"id\":10,\"name\":\"我\",\"parentId\":8}],\"id\":8,\"name\":\"妈妈\",\"parentId\":2},{\"id\":9,\"name\":\"姨妈\",\"parentId\":2}],\"id\":2,\"name\":\"外公\",\"parentId\":0}]";
        JSONArray objects = JSON.parseArray(s);
        System.out.println(objects);
        List<PersonTreeNode> list = JSONObject.parseArray(s,PersonTreeNode.class);
        System.out.println(list);
        List<PersonTreeNode> forLoops = PersonTreeBuilder.bulid(list);
        System.out.println(forLoops);
    }

    public static void main(String[] args) {
        test1();
//        test2();
    }
}


/**
 * @ClassName PersonTreeNode
 * @Author ERIKSYANG
 * @Date 2021/1/8
 */

class PersonTreeNode {

    /**
     * attribute
     */
    private Long id;
    private Long parentId;
    private String name;
    private List<PersonTreeNode> children;

    /**
     * constructor
     */
    public PersonTreeNode() {
    }
    public PersonTreeNode(Long id, String name, Long parentId) {
        this.id = id;
        this.parentId = parentId;
        this.name = name;
    }
    public PersonTreeNode(Long id, String name, PersonTreeNode parent) {
        this.id = id;
        this.parentId = parent.getId();
        this.name = name;
    }

    /**
     * get and set
     */
    public Long getParentId() {
        return parentId;
    }
    public void setParentId(Long parentId) {
        this.parentId = parentId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public List<PersonTreeNode> getChildren() {
        return children;
    }
    public void setChildren(List<PersonTreeNode> children) {
        this.children = children;
    }

    @Override
    public String toString() {
        return "PersonTreeNode{" +
                "id=" + id +
                ", parentId=" + parentId +
                ", name='" + name + '\'' +
                ", children=" + children +
                '}';
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值