java樹形菜單對象生成
本文實(shí)例為大家分享了java樹形菜單對象生成的具體代碼,供大家參考,具體內(nèi)容如下
1、TreeNode對象
package com.ruoyi.system.utils.Vo; import java.util.ArrayList; import java.util.List; public class TreeNode { /** * 節(jié)點(diǎn)ID */ private Integer id; /** * 節(jié)點(diǎn)名稱 */ private String name; /** * 父節(jié)點(diǎn)ID */ private Integer parentId; /** * 子節(jié)點(diǎn)列表 */ private List childrenList = new ArrayList(); public Integer getId() { return id; } public void setId(Integer id) { this.id=id; } public String getName() { return name; } public void setName(String name) { this.name=name; } public Integer getParentId() { return parentId; } public void setParentId(Integer parentId) { this.parentId=parentId; } public List getChildrenList() { return childrenList; } public void setChildrenList(List childrenList) { this.childrenList=childrenList; } }
2、TreeUtil
package com.ruoyi.system.utils; import com.ruoyi.system.utils.Vo.TreeNode; import java.util.ArrayList; import java.util.List; public class TreeUtil { private List<TreeNode> treeNodeList =new ArrayList<>(); public TreeUtil(List<TreeNode> list){ treeNodeList = list; } /** * 獲取節(jié)點(diǎn)信息 * @param nodeId 節(jié)點(diǎn)ID * @return */ public TreeNode getNodeById(int nodeId){ TreeNode treeNode = new TreeNode(); for (TreeNode item : treeNodeList) { if (item.getId() == nodeId) { treeNode = item; break; } } return treeNode; } /** * 獲取子節(jié)點(diǎn)信息 * @param nodeId 節(jié)點(diǎn)ID * @return */ public List<TreeNode> getChildrenNodeById(int nodeId){ List<TreeNode> childrenTreeNode = new ArrayList<TreeNode>(); for (TreeNode item : treeNodeList) { if(item.getParentId() == nodeId){ childrenTreeNode.add(item); } } return childrenTreeNode; } /** * 遞歸生成Tree結(jié)構(gòu)數(shù)據(jù) * @param rootId 根節(jié)點(diǎn)ID * @return */ public TreeNode generateTreeNode(int rootId){ TreeNode root = this.getNodeById(rootId); List<TreeNode> childrenTreeNode = this.getChildrenNodeById(rootId); for (TreeNode item : childrenTreeNode) { TreeNode node = this.generateTreeNode(item.getId()); root.getChildrenList().add(node); } return root; } public static void main(String[] args) { List<TreeNode> nodeList = new ArrayList<>(); TreeNode treeNode = new TreeNode(); treeNode.setId(1); treeNode.setName("中國"); treeNode.setParentId(0); nodeList.add(treeNode); treeNode = new TreeNode(); treeNode.setId(2); treeNode.setName("北京市"); treeNode.setParentId(1); nodeList.add(treeNode); treeNode = new TreeNode(); treeNode.setId(3); treeNode.setName("浙江省"); treeNode.setParentId(1); nodeList.add(treeNode); treeNode = new TreeNode(); treeNode.setId(4); treeNode.setName("杭州市"); treeNode.setParentId(3); nodeList.add(treeNode); treeNode = new TreeNode(); treeNode.setId(5); treeNode.setName("西湖區(qū)"); treeNode.setParentId(4); nodeList.add(treeNode); treeNode = new TreeNode(); treeNode.setId(6); treeNode.setName("濱江區(qū)"); treeNode.setParentId(4); nodeList.add(treeNode); treeNode = new TreeNode(); treeNode.setId(7); treeNode.setName("金華市"); treeNode.setParentId(3); nodeList.add(treeNode); TreeUtil treeUtil = new TreeUtil(nodeList); treeNode = treeUtil.generateTreeNode(1); System.out.println("樹狀結(jié)構(gòu)Json格式數(shù)據(jù):" + JsonUtils.objectToJson(treeNode, 1)); } }
3、JsonUtil
package com.ruoyi.system.utils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.List; public class JsonUtils { // 定義jackson對象 private static final ObjectMapper MAPPER = new ObjectMapper(); /** * 將對象轉(zhuǎn)換成json字符串 * @param obj 需轉(zhuǎn)換的對象 * @param flag Json格式化標(biāo)識(shí)(0-否,1-是) * @return */ public static <T> String objectToJson(T obj, int flag) { if (obj == null) { return null; } try { String string; if (flag == 1) { string = obj instanceof String ? (String) obj : MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj); } else { string = obj instanceof String ? (String) obj : MAPPER.writeValueAsString(obj); } return string; } catch (JsonProcessingException e) { e.printStackTrace(); } return null; } /** * 將json結(jié)果集轉(zhuǎn)化為對象 * * @param jsonData json數(shù)據(jù) * @param beanType 對象中的object類型 * @return */ public static <T> T jsonToPojo(String jsonData, Class<T> beanType) { try { T t = MAPPER.readValue(jsonData, beanType); return t; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 將json數(shù)據(jù)轉(zhuǎn)換成pojo對象list * <p>Title: jsonToList</p> * <p>Description: </p> * @param jsonData * @param beanType * @return */ public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) { JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); try { List<T> list = MAPPER.readValue(jsonData, javaType); return list; } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) { System.out.println("測試字符串對象:" + objectToJson("hello world", 1)); } }
4、運(yùn)行結(jié)果
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳細(xì)講解springboot如何實(shí)現(xiàn)異步任務(wù)
異步:異步與同步相對,當(dāng)一個(gè)異步過程調(diào)用發(fā)出后,調(diào)用者在沒有得到結(jié)果之前,就可以繼續(xù)執(zhí)行后續(xù)操作。也就是說無論異步方法執(zhí)行代碼需要多長時(shí)間,跟主線程沒有任何影響,主線程可以繼續(xù)向下執(zhí)行2022-04-04解決springboot利用ConfigurationProperties注解配置數(shù)據(jù)源無法讀取配置信息問題
今天在學(xué)習(xí)springboot利用ConfigurationProperties注解配置數(shù)據(jù)源的使用遇到一個(gè)問題無法讀取配置信息,發(fā)現(xiàn)全部為null,糾結(jié)是哪里出了問題呢,今天一番思考,問題根源找到,下面把我的解決方案分享到腳本之家平臺(tái),感興趣的朋友一起看看吧2021-05-05Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(31)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07idea ssm項(xiàng)目java程序使用十六進(jìn)制rxtx包向串口發(fā)送指令的方法
這篇文章主要介紹了idea ssm項(xiàng)目java程序向串口發(fā)送指令并且使用十六進(jìn)制 rxtx包,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Java實(shí)現(xiàn)Word/Pdf/TXT轉(zhuǎn)html的實(shí)例代碼
本文主要介紹了Java實(shí)現(xiàn)Word/Pdf/TXT轉(zhuǎn)html的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Spring Boot配置接口WebMvcConfigurer的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot配置接口WebMvcConfigurer的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11HashMap實(shí)現(xiàn)保存兩個(gè)key相同的數(shù)據(jù)
這篇文章主要介紹了HashMap實(shí)現(xiàn)保存兩個(gè)key相同的數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06