参考网址人家是封装的反射,泛型
耻辱,现在不会用他们封装的方法
到处之前excel导入的数据,参照之前写的网址poi低版本导入excel表头
就贴一个control层
java
@GetMapping(value = "/all")
@Log("查询excel测试导入表头不带分页")
@ApiOperation("查询excel测试导入表头不带分页")
// @PreAuthorize("@el.check('sysTest:list')")
public ResponseEntity<PageResult<SysTest>> querySysTest(SysTestQueryCriteria criteria){
List<SysTest> sysTests = sysTestService.queryAll(criteria);
// 将list处理成tree
ArrayList<SysTest> roots = new ArrayList<>();
for (SysTest tree:sysTests){
String parentlevel = tree.getParentlevel();
if(StrUtil.isBlank(parentlevel)){
roots.add(tree);
}
}
sysTests.removeAll(roots);
// 为根节点添加孩子节点
for (SysTest tree:roots){
addChild(tree,sysTests);
}
// System.out.println(roots);
return new ResponseEntity<>(PageUtil.toPage(roots),HttpStatus.OK);
}
public void addChild(SysTest tree,List<SysTest> sysTests){
String headid = tree.getHeadid();
List<SysTest> children = tree.getChildren();
for(SysTest cc : sysTests){
if(headid.equals(cc.getParentlevel())){
if(children == null){
children = new ArrayList<>();
}
children.add(cc);
// 写死的时候才知道人家封装说的(我debug发现自己是null,没有初始化)
// 重设目标节点的孩子节点集合,这里必须重设,因为如果目标节点的孩子节点是null的话,这样是没有地址的,就会造成数据丢失,所以必须重设,如果目标节点所在类的孩子节点初始化为一个空集合,而不是null,则可以不需要这一步,因为java一切皆指针
tree.setChildren(children);
addChild(cc,sysTests);
}
}
}