- 一、定义ITree接口
- 二、继承ITree接口并实现方法
- 三、工具类编写
- 四、工具类调用
现在系统有很多模块需要tree格式的json,应次需求搞一个通用的工具,该暂时只适合有父子关系的对象。 一、定义ITree接口
public interface ITree二、继承ITree接口并实现方法{ Integer getId(); Integer getParentId(); List getChildren(); void setChildren(List children); }
@Data public class MenusVo implements ITree三、工具类编写{ private Integer id; private String authName; private String path; private Integer parentId; private List children; }
public class ConvertUtil {
private ConvertUtil() {
}
public static List convertTree(List resource, Predicate super T> predicate) {
List result = resource.stream().filter(predicate).collect(Collectors.toList());
// 移出父级元素
resource.removeIf(result::contains);
ConvertUtil.setChilder(result, resource);
return result;
}
private static void setChilder(List parentList, List elements) {
if (CollUtil.isEmpty(elements)) {
return;
}
// 遍历父级
parentList.forEach(parent -> {
List childer = elements.stream().filter(element -> parent.getId().equals(element.getParentId())).collect(Collectors.toList());
parent.setChildren(childer);
elements.removeIf(childer::contains);
setChilder(childer, elements);
});
}
}
四、工具类调用
public ResponseEntity tree() {
List menusList = ConvertUtil.convertList(menusService.list(null), MenusVo.class);
List result = ConvertUtil.convertTree(menusList, menusVo -> 0 == menusVo.getParentId());
}



