JAVA 构建树结构
使用Stream流
实体类
@Data
public class ListVo {
private static final long serialVersionUID = 1L;
/** Id */
@ApiModelProperty(value = "Id")
private Long id;
/** 父级id */
@ApiModelProperty(value = "父级id")
private Long parentId;
/** 名称 */
@ApiModelProperty(value = "名称")
private String Name;
/** 子树 */
@ApiModelProperty(value = "子树")
private List<ListVo> children;
}
查询结果集
直接数据库正常获取对象集合即可,此处不记录
构建树结构
@Override
public List<ListVo> bomTree(Long Id) {
//数据库查询结果集合
List<ListVo> trees =
DetailMapper.selectMenuById(Id);
// 获取父节点
List<ListVo> collect =
trees.stream()
.filter(m -> m.getParentId() == 0)
.peek((m) -> m.setChildren(getChildrenList(m, trees)))
.collect(Collectors.toList());
return collect;
}
/**
* 获取子节点列表
*
* @param tree
* @param list
* @return
*/
public static List<ListVo> getChildrenList(
ListVo tree, List<ListVo> list) {
return list.stream()
.filter(item -> Objects.equals(item.getParentId(), tree.getId()))
.peek((item) -> item.setChildren(getChildrenList(item, list)))
.collect(Collectors.toList());
}
collect即为构建后的树形结构