TreeUtil 构建树形结构的基本用法
每次构建树形结构都重复递归代码
可以了解一下hutool 的TreeUtil
@RequestMapping(value = "testTree")
public String testTree() {
DmFunctionLocationBean topNode = ADOConnection.runTask(factory -> {
return factory.getMapper(DmFunctionLocationMapper.class).queryFirstByParentId(null);
}, DmFunctionLocationBean.class);
if (topNode == null) {
return "";
}
List<DmFunctionLocationBean> dblist = ADOConnection.runTask(factory -> {
return factory.getMapper(DmFunctionLocationMapper.class).queryAll();
}, List.class);
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
treeNodeConfig.setWeightKey("order");
treeNodeConfig.setIdKey("rid");
treeNodeConfig.setParentIdKey("parentId");
treeNodeConfig.setDeep(3);
List<Tree<String>> treeList = TreeUtil.build(dblist, topNode.getId(), treeNodeConfig,
(treeNode, node) -> {
node.setId(treeNode.getId());
node.setParentId(treeNode.getParentId());
node.setWeight(treeNode.getSortNo());
node.setName(treeNode.getFlName());
node.putExtra("id", treeNode.getId());
node.putExtra("dispatchNo", treeNode.getDispatchNo());
node.putExtra("dataFrom", treeNode.getDataFrom());
Map<String, Object> map = BeanUtil.beanToMap(treeNode);
for (Map.Entry<String, Object> entry : map.entrySet()) {
node.putExtra(entry.getKey() ,entry.getValue());
}
});
Tree tree = new Tree(treeNodeConfig);
tree.setName("顶级节点");
tree.setId(topNode.getId());
tree.setChildren(treeList);
tree.putExtra("id", topNode.getId());
tree.putExtra("dispatchNo", topNode.getDispatchNo());
tree.putExtra("dataFrom", topNode.getDataFrom());
List<DmFunctionLocationBeanVo> jsonToList = FastJsonUtils.getJsonToList(FastJsonUtils.getBeanToJson(list), DmFunctionLocationBeanVo.class);
List<DmFunctionLocationBean> insertlist = new ArrayList();
recursionEq(jsonToList, insertlist);
System.out.println(insertlist.size());
return FastJsonUtils.getBeanToJson(tree);
}
public void recursionEq(List<DmFunctionLocationBeanVo> jsonToList, List<DmFunctionLocationBean> insertlist) {
for (DmFunctionLocationBeanVo vo: jsonToList) {
DmFunctionLocationBean convert = Convert.convert(DmFunctionLocationBean.class, vo);
insertlist.add(convert);
if (CollUtil.isNotEmpty(vo.getChildren())) {
recursionEq(vo.getChildren(), insertlist);
}
}
}
用到的依赖 和 公用方法
调库代码自己重写
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.15</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FastJsonUtils {
public static <T> T getJsonToBean(String jsonData, Class<T> clazz) {
return JSON.parseObject(jsonData, clazz);
}
public static String getBeanToJson(Object object) {
return JSON.toJSONString(object);
}
public static <T> List<T> getJsonToList(String jsonData, Class<T> clazz) {
return JSON.parseArray(jsonData, clazz);
}
public static List<Map<String, Object>> getJsonToListMap(String jsonData) {
return JSON.parseObject(jsonData, new TypeReference<List<Map<String, Object>>>() {
});
}
public static ArrayList<HashMap<String, String>> convertToDataList(List<?> reportDataList) {
String json = "";
try {
json = new ObjectMapper().writeValueAsString(reportDataList);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println(json);
TypeToken<ArrayList<HashMap<String, String>>> type = new TypeToken<ArrayList<HashMap<String, String>>>() {
};
ArrayList<HashMap<String, String>> dataList = new Gson().fromJson(json, type.getType());
return dataList;
}
}