真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

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

第一步:引入fastjson


  com.alibaba
  fastjson
  ${fastjson.version}

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

JSONPath使用教程

  /**
   * 樹轉(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  子樹的字段名
   * @param c          需要轉(zhuǎn)換的Class類型
   * @param          泛型
   * @return 返回List
   */
  public static  List tree(Object obj, String parentCodeFieldName, String parentCode, String currentCodeFieldName, String childrenFiledName, Class c) {
    long t1 = System.currentTimeMillis();
    String jsonStr = JSON.toJSONString(obj);
    log.debug("樹轉(zhuǎn)換開始 >>>>>>>>>>>>>>>> {}", 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 list = JSONArray.parseArray(jsonArray.toString(), c);
    log.debug("樹轉(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í)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


網(wǎng)站標(biāo)題:JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例
瀏覽路徑:http://weahome.cn/article/gshsoo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部