Java8优雅的递归
/**
* 封装树形结构
* @param data
* @return
*/
public List<TreeVo> listWithTree(List<TreeVo> data) {
//将数据组成树形结构
//筛选出根元素
//利用stream函数来过滤和处理
List<TreeVo> root = data.stream().filter(tmp ->
tmp.getParentId() == 0//获取所有父节点
).map(tmps -> {
//设置子节点
tmps.setChildren(getChildrens(tmps, data));
return tmps;
}).collect(Collectors.toList());
return root;
}
/**
* 查找所有root的子节点,方法内是递归查找
* @param root
* @param all
* @return
*/
private List<TreeVo> getChildrens(TreeVo root, List<TreeVo> all) {
List<TreeVo> children = all.stream().filter(tmp ->
tmp.getParentId().equals(root.getId())
).map(tmps -> {
//查找所有子节点的子节点
tmps.setChildren(getChildrens(tmps, all));
return tmps;
}).collect(Collectors.toList());
return children;
}
拿走不谢!