欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2020年03月26日 10:13:39   作者:趙小胖0914  
這篇文章主要介紹了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格式。

第一步:引入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 父標識字段名
   * @param parentCode      父標識值
   * @param currentCodeFieldName 當前標識字段名
   * @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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java死鎖的產(chǎn)生原因及解決方法總結(jié)

    Java死鎖的產(chǎn)生原因及解決方法總結(jié)

    Java中的死鎖是指多個線程同時占用一些共享資源且彼此相互等待,從而導致所有的線程都被阻塞,不能繼續(xù)執(zhí)行程序的情況,本文小編給大家介紹了Java死鎖的產(chǎn)生原因及解決方法總結(jié),需要的朋友可以參考下
    2023-11-11
  • RabbitMQ實現(xiàn)消費端限流的步驟

    RabbitMQ實現(xiàn)消費端限流的步驟

    消費者端限流的主要目的是控制消費者每次從 RabbitMQ 中獲取的消息數(shù)量,從而實現(xiàn)消息處理的流量控制,這篇文章主要介紹了RabbitMQ如何實現(xiàn)消費端限流,需要的朋友可以參考下
    2024-03-03
  • Spring Boot參數(shù)校驗及分組校驗的使用教程

    Spring Boot參數(shù)校驗及分組校驗的使用教程

    在日常的開發(fā)中,參數(shù)校驗是非常重要的一個環(huán)節(jié),嚴格參數(shù)校驗會減少很多出bug的概率,增加接口的安全性,下面這篇文章主要給大家介紹了關(guān)于Spring Boot參數(shù)校驗及分組校驗使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • springmvc模式的上傳和下載實現(xiàn)解析

    springmvc模式的上傳和下載實現(xiàn)解析

    這篇文章主要介紹了springmvc模式下的上傳和下載實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • MyEclipse8.6首次運行maven項目圖標上沒有小M的標識怎么解決

    MyEclipse8.6首次運行maven項目圖標上沒有小M的標識怎么解決

    myeclipse8.6導入maven項目后識別為普通java項目,即項目圖標上沒有小M的標識。這時是無法直接運行的,怎么解決這一問題呢?下面小編給大家?guī)砹私鉀Q方案,需要的朋友參考下吧
    2016-11-11
  • idea重新下載已刪除的maven依賴包操作

    idea重新下載已刪除的maven依賴包操作

    這篇文章主要介紹了idea重新下載已刪除的maven依賴包操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java WebService 簡單實例(附實例代碼)

    Java WebService 簡單實例(附實例代碼)

    本篇文章主要介紹了Java WebService 簡單實例(附實例代碼), Web Service 是一種新的web應(yīng)用程序分支,他們是自包含、自描述、模塊化的應(yīng)用,可以發(fā)布、定位、通過web調(diào)用。有興趣的可以了解一下
    2017-01-01
  • java截取網(wǎng)頁圖片的方法

    java截取網(wǎng)頁圖片的方法

    這篇文章主要介紹了java截取網(wǎng)頁圖片的方法,涉及java調(diào)用第三方控件實現(xiàn)截圖的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java中文件寫入內(nèi)容的幾種常見方法

    Java中文件寫入內(nèi)容的幾種常見方法

    本文主要介紹了Java中文件寫入內(nèi)容的幾種常見方法,主要包括使用NIO的Files工具類、通過commons-io的FileUtils工具類、RandomAccessFile、PrintWriter和BufferedWriter這幾種,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • SpringBoot手寫自定義starter源碼

    SpringBoot手寫自定義starter源碼

    這篇文章主要介紹了SpringBoot手寫自定義starter源碼,SpringBoot擁有很多方便使用的starter,比如spring-boot-starter-log4j、mybatis-spring-boot-starter.jar等,各自都代表了一個相對完整的功能模塊,需要的朋友可以參考下
    2023-10-10

最新評論