中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

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

銅陵網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,銅陵網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為銅陵上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的銅陵做網(wǎng)站的公司定做!

第一步:引入fastjson

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

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

JSONPath使用教程

  /**
   * 樹轉(zhuǎn)換
   *
   * @param obj         需要轉(zhuǎn)換的對象
   * @param parentCodeFieldName 父標(biāo)識字段名
   * @param parentCode      父標(biāo)識值
   * @param currentCodeFieldName 當(dāng)前標(biāo)識字段名
   * @param childrenFiledName  子樹的字段名
   * @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("樹轉(zhuǎn)換開始 >>>>>>>>>>>>>>>> {}", JSON.toJSONString(obj));
    //獲取第一層級的數(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("樹轉(zhuǎn)換結(jié)束, 轉(zhuǎn)換時間: {} 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);
    }
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)站名稱:JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實例
文章起源:http://www.rwnh.cn/article0/gshsoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、軟件開發(fā)、響應(yīng)式網(wǎng)站、網(wǎng)站收錄品牌網(wǎng)站制作、手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
铜陵市| 丹棱县| 德安县| 高陵县| 登封市| 军事| 吉木萨尔县| 伊吾县| 屯留县| 萨嘎县| 临潭县| 怀化市| 泰和县| 深州市| 铁力市| 江阴市| 正宁县| 永新县| 美姑县| 句容市| 桂阳县| 蕲春县| 漳平市| 上犹县| 盘锦市| 诸暨市| 苍梧县| 高密市| 穆棱市| 华池县| 会同县| 布尔津县| 南京市| 聂荣县| 区。| 绿春县| 恩施市| 漳平市| 高邮市| 阳城县| 壤塘县|