1、递归
递归就是一个程序或函数在其中定义或说明有之间或者间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量,递归的能力在于用有限的语句来定义对象的无限集合,一般来说,递归需要边界条件,递归前进段和递归返回段,当边界条件不满足时,递归前进,当边界条件满足时,递归返回。
2、实例代码
private List<HkFiletype> buildTree(List<HkFiletype> hkFiletypes,
String preentId,
List<HkFiletype> hktrees){
//第一级数据
if ("0".equals(preentId)){
hkFiletypes.forEach(hkFiletype -> {
String parentfiletypeid = hkFiletype.getParentfiletypeid();
if (null != parentfiletypeid && parentfiletypeid.equals(preentId)){
hktrees.add(hkFiletype);
}
});
}else {
hktrees.forEach(hkFiletype -> {
String id = hkFiletype.getId();
List<HkFiletype> hktree = new ArrayList<>();
hkFiletypes.forEach(hkFiletype1 ->{
String parentfiletypeid = hkFiletype1.getParentfiletypeid();
if (parentfiletypeid.equals(id)){
hkFiletype.setHasChildren(true);
hktree.add(hkFiletype1);
buildTree(hkFiletypes,hkFiletype1.getId(),hktree);
}
} );
hkFiletype.setChiles(hktree);
});
}
return hktrees;
}
3、代码调用
public List<HkFiletype> selectTreeList(HkFiletype hkFiletype){
hkFiletype.setDelmark(1);
List<HkFiletype> hkFiletypes = hkFiletypeMapper.selectList(hkFiletype);
List<HkFiletype> hktrees = new ArrayList<>();
hktrees = buildTree(hkFiletypes,"0",hktrees);
hktrees = buildTree(hkFiletypes,"1",hktrees);
return hktrees;
}