两步循环构造不限层级结构树

2020-07-26  本文已影响0人  Jinx菜鸟之路

两步循环构造不限层级结构树

通常构造不限层级的树结构做法都是使用递归,使用此方法都需要套用多重循环来进行处理。

最近研究出来使用两步循环就可拼装出不限层级结构的树,如下:

/** *@description: *@author: chujg *@create: 2019-08-05 09:25 **/

@Data

public classNodeVo{

    private int id;

    private String name;

    private int parentId;

    private int order;

    private List<NodeVo> son;

}

main 方法

/** *@description: *@author: chujg *@create: 2019-08-05 09:24 **/

public classTestNode{

    publicstaticvoidmain(String[] args){

        List<NodeVo> nodeAll = new ArrayList<>();

        NodeVo vo = new NodeVo();

        vo.setId(1);

        vo.setName("node1");

        vo.setOrder(1);

        nodeAll.add(vo);

        NodeVo vo3 = new NodeVo();

        vo3.setId(3);

        vo3.setName("node3");

        vo3.setParentId(1);

        vo3.setOrder(1);

        nodeAll.add(vo3);

        NodeVo vo2 = new NodeVo();

        vo2.setId(2);

        vo2.setName("node2");

        vo2.setParentId(1);

        vo2.setOrder(2);

        nodeAll.add(vo2);

        NodeVo vo4 = new NodeVo();

        vo4.setId(4);

        vo4.setName("node4");

        vo4.setParentId(2);

        vo4.setOrder(1);

        nodeAll.add(vo4);

        Map<Integer, NodeVo> map = new LinkedHashMap<>();

        List<NodeVo> rootNode = new ArrayList<>();

        nodeAll.forEach(i -> {

            map.put(i.getId(), i);

            if (i.getParentId() == 0) {

                rootNode.add(i);

            }

        });

        nodeAll.forEach(i -> {

            NodeVo parentNode = null;

            if (i.getParentId() != 0) {

              parentNode = map.get(i.getParentId());

                List<NodeVo> sonList = parentNode.getSon();

              if (sonList == null) {

                  sonList = new ArrayList<>();

              }

                sonList.add(i);

                parentNode.setSon(sonList);

            }

        });

        System.out.println(rootNode);

    }

}

上一篇 下一篇

猜你喜欢

热点阅读