两步循环构造不限层级结构树
通常构造不限层级的树结构做法都是使用递归,使用此方法都需要套用多重循环来进行处理。
最近研究出来使用两步循环就可拼装出不限层级结构的树,如下:
/** *@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);
}
}
网友评论