java处理数据成为树状结构
如题所示,项目中需要将部分数据处理成为树状结构
实现过程
注:也可以使用sql达到该目的,但此处数据不多,故在代码中处理,主要是sql处理不是很会
// 获取需要封装的数据
list<data> dataall = service.findall();
if (collutil.isempty(dataall)) {
return new arraylist<>();
}
// 获取顶层目录 项目中上级编码为空则为一级目录
list<data> parentlist = dataall.stream()
.filter(item -> objectutil.isempty(item.getparentnumber())).collect(collectors.tolist());
// 获取下级目录,上级编码不为空则非一级目录
list<data> childlist = dataall.stream()
.filter(item -> objectutil.isnotempty(item.getparentnumber())).collect(collectors.tolist());
// 封装树状结构
return parentlist.stream().map(item1 -> {
data chaptervo = new data();
beanutils.copyproperties(item1, chaptervo);
list<data> videovolist = childlist.stream()
.filter(item2 -> item1.getbackgroundmanagementcategorynumber().equals(item2.getparentnumber()))
.map(item3 -> {
data videovo = new data();
beanutils.copyproperties(item3, videovo);
return videovo;
})
.collect(collectors.tolist());
chaptervo.setchildren(videovolist);
return chaptervo;
}).collect(collectors.tolist());
java将查出来的数据拼树
递归方法构建树
/**
* 使用递归方法建树
* @param menutrees 子节点集合 / 返回的数据
* @return list
*/
public static list<dept> buildbyrecursive(list<dept> menutrees) {
list<dept> trees = new arraylist<>();
for (dept menutree : menutrees) {
//查找根节点
if (menutree.getpcode() == null) {
trees.add(findchildren(menutree,menutrees));
}
}
return trees;
}/**
* 递归查找子节点
* @param menutree 菜单数对象
* @param menutrees 子节点
* @return menutree
*/
private static dept findchildren(dept menutree,list<dept> menutrees){
for (dept it : menutrees) {
if(menutree.getcode().equals(it.getpcode())) {
if (menutree.getchildren() == null) {
menutree.setchildren(new arraylist<>());
}
menutree.getchildren().add(findchildren(it,menutrees));
}
}
return menutree;
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论