亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JAVA如何轉(zhuǎn)換樹(shù)結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例

瀏覽:105日期:2022-09-03 16:38:15

在實(shí)戰(zhàn)開(kāi)發(fā)中經(jīng)常有需要處理樹(shù)形菜單、樹(shù)形目錄等等等業(yè)務(wù)需求。而對(duì)于這種產(chǎn)品,在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)也建議使用id<----->parentId的結(jié)構(gòu)來(lái)做。但是最終前端顯示多用hightChart或者Echart插件來(lái)實(shí)現(xiàn)。所以在給前端數(shù)據(jù)時(shí),最好的做法就是把數(shù)據(jù)庫(kù)結(jié)構(gòu)話的數(shù)據(jù)處理成treeJson格式。

第一步:引入fastjson

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version></dependency>

第二步:用到了工具內(nèi)的JSONPath

JSONPath使用教程

/** * 樹(shù)轉(zhuǎn)換 * * @param obj 需要轉(zhuǎn)換的對(duì)象 * @param parentCodeFieldName 父標(biāo)識(shí)字段名 * @param parentCode 父標(biāo)識(shí)值 * @param currentCodeFieldName 當(dāng)前標(biāo)識(shí)字段名 * @param childrenFiledName 子樹(shù)的字段名 * @param c 需要轉(zhuǎn)換的Class類型 * @param <T> 泛型 * @return 返回List<T> */ public static <T> List<T> tree(Object obj, String parentCodeFieldName, String parentCode, String currentCodeFieldName, String childrenFiledName, Class<T> c) { long t1 = System.currentTimeMillis(); String jsonStr = JSON.toJSONString(obj); log.debug('樹(shù)轉(zhuǎn)換開(kāi)始 >>>>>>>>>>>>>>>> {}', JSON.toJSONString(obj)); //獲取第一層級(jí)的數(shù)據(jù) JSONArray jsonArray = (JSONArray) JSONPath.read(jsonStr, '$[' + parentCodeFieldName + '=' + parentCode + ']'); if (CollectionUtils.isEmpty(jsonArray)) { //為空的話直接返回空集合 return Lists.newArrayList(); } for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String code = jsonObject.getString(currentCodeFieldName); treeChildren(jsonStr, jsonObject, parentCodeFieldName, code, currentCodeFieldName, childrenFiledName); } List<T> list = JSONArray.parseArray(jsonArray.toString(), c); log.debug('樹(shù)轉(zhuǎn)換結(jié)束, 轉(zhuǎn)換時(shí)間: {} ms . >>>>>>>>>>>>>>>> {}', (System.currentTimeMillis() - t1), JSON.toJSONString(list)); return list; } private static void treeChildren(String jsonStr, JSONObject currentJsonObj, String parentCodeFieldName, String parentCode, String currentCodeFieldName, String childrenFiledName) { JSONArray jsonArray = (JSONArray) JSONPath.read(jsonStr, '$[' + parentCodeFieldName + '=' + parentCode + ']'); if (CollectionUtils.isEmpty(jsonArray)) { return; } currentJsonObj.put(childrenFiledName, jsonArray); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String code = jsonObject.getString(currentCodeFieldName); treeChildren(jsonStr, jsonObject, parentCodeFieldName, code, currentCodeFieldName, childrenFiledName); } }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产专区日韩精品欧美色 | 久久精品国产欧美 | 精品国产午夜久久久久九九 | 麻豆短视频传媒网站怎么找 | 色综合一区 | 好吊色综合网天天高清 | 一级做性色a爰片久久毛片 一级做性色a爰片久久毛片免费 | 欧美一级片在线免费观看 | 日本一级毛片视频无遮挡免费 | 四虎澳门永久8848在线影院 | 精品视频一区二区三区在线观看 | 亚洲综合伦理一区 | 久久精品网站免费观看 | 国产成人影院一区二区 | 理论片我不卡在线观看 | 俄罗斯美女bbbbxx | 鸥美肥妇特级毛片视频 | 国产黄网站| 视频一区 精品自拍 | 91综合精品网站久久 | 久久久久久久综合狠狠综合 | 久久99精品久久久久久国产越南 | 色屁屁一区二区三区视频国产 | 免费国产成人午夜在线观看 | 性xxxxxxx动漫视频 | 91精品国产免费入口 | 亚洲第一页在线播放 | 亚洲国产最新 | 欧美日本一区亚洲欧美一区 | 美国特级片 | 一级做a爱过程免费视频高清 | 精品国产1区 | 香蕉99国内自产自拍视频 | 欧美黄一级 | 成人免费看黄页网址大全 | 国产精品成人免费福利 | 国产一区亚洲二区三区 | 国产青草视频免费观看97 | 欧美成人免费mv在线播放 | 精品日韩欧美一区二区三区 | 国产高级黄区18勿进一区二区 |