最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年03月26日 10:13:39   作者:趙小胖0914  
這篇文章主要介紹了JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

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

第一步:引入fastjson

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

第二步:用到了工具內(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 <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));
    //獲取第一層級(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("樹轉(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);
    }
  }

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot詳解如何整合Redis緩存驗(yàn)證碼

    SpringBoot詳解如何整合Redis緩存驗(yàn)證碼

    本文主要介紹了SpringBoot集成Redis實(shí)現(xiàn)驗(yàn)證碼的緩存簡單案例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • springcloud LogBack日志使用詳解

    springcloud LogBack日志使用詳解

    這篇文章主要介紹了springcloud LogBack日志使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot整合Web開發(fā)之文件上傳與@ControllerAdvice

    SpringBoot整合Web開發(fā)之文件上傳與@ControllerAdvice

    @ControllerAdvice注解是Spring3.2中新增的注解,學(xué)名是Controller增強(qiáng)器,作用是給Controller控制器添加統(tǒng)一的操作或處理。對(duì)于@ControllerAdvice,我們比較熟知的用法是結(jié)合@ExceptionHandler用于全局異常的處理,但其作用不止于此
    2022-08-08
  • mybatis如何返回某列的最大值

    mybatis如何返回某列的最大值

    這篇文章主要介紹了mybatis如何返回某列的最大值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java后臺(tái)與微信小程序的數(shù)據(jù)交互實(shí)現(xiàn)

    Java后臺(tái)與微信小程序的數(shù)據(jù)交互實(shí)現(xiàn)

    這篇文章主要介紹了Java后臺(tái)與微信小程序的數(shù)據(jù)交互實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • SpringBoot使用Nacos進(jìn)行application.yml配置管理

    SpringBoot使用Nacos進(jìn)行application.yml配置管理

    Nacos是阿里巴巴開源的一個(gè)微服務(wù)配置管理和服務(wù)發(fā)現(xiàn)的解決方案,它提供了動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和?服務(wù)管理平臺(tái),Nacos使用Raft協(xié)議保證配置的一致性,同時(shí)支持多種配置?格式,如properties、yaml等,本文介紹了SpringBoot使用Nacos進(jìn)行application.yml配置管理
    2024-12-12
  • Spring-Smart-DI 動(dòng)態(tài)切換實(shí)現(xiàn)類的步驟

    Spring-Smart-DI 動(dòng)態(tài)切換實(shí)現(xiàn)類的步驟

    文章介紹了如何使用spring-smart-di的@AutowiredProxySPI注解來實(shí)現(xiàn)動(dòng)態(tài)切換服務(wù)提供商的功能,通過配置點(diǎn)和代理對(duì)象,實(shí)現(xiàn)動(dòng)態(tài)切換而無需重啟服務(wù),感興趣的朋友一起看看吧
    2025-03-03
  • Java的枚舉,注解和反射(二)

    Java的枚舉,注解和反射(二)

    今天小編就為大家分享一篇關(guān)于Java枚舉,注解與反射原理說明,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-07-07
  • 詳解Java運(yùn)算中的取余

    詳解Java運(yùn)算中的取余

    這篇文章主要介紹了java運(yùn)算中的取余,在java運(yùn)算中,取余符號(hào)是?%,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java項(xiàng)目中添加外部jar包的兩種方式(收藏版)

    Java項(xiàng)目中添加外部jar包的兩種方式(收藏版)

    這篇文章主要介紹了java項(xiàng)目中添加外部jar包的兩種方式,第二種方式是將外部jar包引入到本地maven倉庫中,本文給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-03-03

最新評(píng)論

伊吾县| 通化县| 临沭县| 南雄市| 安陆市| 德安县| 陵水| 丰台区| 灌阳县| 封丘县| 岫岩| 革吉县| 胶南市| 古交市| 新巴尔虎右旗| 澎湖县| 梓潼县| 怀柔区| 万全县| 额济纳旗| 宜章县| 阿城市| 勃利县| 恩平市| 宝山区| 和林格尔县| 忻城县| 偃师市| 汨罗市| 定西市| SHOW| 图片| 越西县| 樟树市| 璧山县| 长乐市| 溧阳市| 巴楚县| 西乌珠穆沁旗| 上饶县| 九龙坡区|