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

java后端把數(shù)據(jù)轉(zhuǎn)換為樹,map遞歸生成json樹,返回給前端(后臺(tái)轉(zhuǎn)換)

 更新時(shí)間:2020年03月25日 17:05:49   作者:不等風(fēng)雨,只等你  
這篇文章主要介紹了java后端把數(shù)據(jù)轉(zhuǎn)換為樹,map遞歸生成json樹,返回給前端實(shí)例(后臺(tái)轉(zhuǎn)換),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

java 后端,把數(shù)據(jù)轉(zhuǎn)換為樹,map遞歸生成一顆json樹,返回給前端(后臺(tái)轉(zhuǎn)換)

1.為什么要寫這樣的一篇博客?

2.java 后端代碼

3. 轉(zhuǎn)化完的數(shù)據(jù)在前端格式為類似于:

1.為什么要寫這樣的一篇博客?

在公司的實(shí)習(xí)的時(shí)候,遇到了一個(gè)略坑的東西,就是要醫(yī)院的科室通過其子父id做成一顆項(xiàng)目樹,但是科室的層次有很多,有點(diǎn)甚至到了六層,導(dǎo)致最終選擇了優(yōu)化后的遞歸算法。

如果在三層或者三層以下,可以考慮使用內(nèi)部類,超過三層的話,最好就使用遞歸了,不過記得必須的優(yōu)化。

2.java 后端代碼

代碼的解釋和理解我卸載代碼里面,返回到前端會(huì)自動(dòng)轉(zhuǎn)換成Json格式的數(shù)據(jù)。

//第一個(gè)參數(shù),需要生成樹的數(shù)組,第二個(gè)參數(shù)為樹的根節(jié)點(diǎn)
public JSONObject getJsontree(JSONArray json,JSONObject job){
 JSONArray tempJson = JSONArray.fromObject("[]");
 //篩選出父id等于job里面id的科室
 for(int i = 0;i < json.size();i++) 
 { 
 //這里可以使用Iterator 
 if(json.getJSONObject(i).get("parent_id").equals(job.get("unit_sn"))) {  
  tempJson.add(json.getJSONObject(i));
 }; 
 }
 // 優(yōu)化,減少科室集合的數(shù)量,避免重復(fù)查詢,有再優(yōu)化的方法,希望告知。。
 json.removeAll(tempJson);
 for(int i = 0;i < tempJson.size(); i ++) {
 //對(duì)第二層進(jìn)行遞歸,此處類推
 getJsontree(json, tempJson.getJSONObject(i));
 }
 //生成完的樹結(jié)構(gòu)map集合加到根節(jié)點(diǎn)
 if(tempJson.size()!=0)
 job.put("children", tempJson);
 return job; 
}

3. 轉(zhuǎn)化完的數(shù)據(jù)在前端格式為類似于:

[
 { text: '節(jié)點(diǎn)1', children: [
  { text: '節(jié)點(diǎn)1.1' },
  { text: '節(jié)點(diǎn)1.2' },
  { text: '節(jié)點(diǎn)1.3', children: [
  { text: '節(jié)點(diǎn)1.3.1' },
  { text: '節(jié)點(diǎn)1.3.2' }
  ]
  },
  { text: '節(jié)點(diǎn)1.4' }
 ]
 }
 ]

補(bǔ)充知識(shí):java將list轉(zhuǎn)為樹形結(jié)構(gòu)的方法

1、通過轉(zhuǎn)化成json封裝數(shù)據(jù)

[
 {
 "name":"甘肅省",
 "pid":0,
 "id":1
 },
 {
 "name":"天水市",
 "pid":1,
 "id":2
 },
 {
 "name":"秦州區(qū)",
 "pid":2,
 "id":3
 },
 {
 "name":"北京市",
 "pid":0,
 "id":4
 },
 {
 "name":"昌平區(qū)",
 "pid":4,
 "id":5
 }
]

現(xiàn)需要是使用java將以上數(shù)據(jù)轉(zhuǎn)為樹形結(jié)構(gòu),轉(zhuǎn)化后下的結(jié)構(gòu)如下

[
 {
 "children":[
  {
  "children":[
   {
   "name":"秦州區(qū)",
   "pid":2,
   "id":3
   }
  ],
  "name":"天水市",
  "pid":1,
  "id":2
  }
 ],
 "name":"甘肅省",
 "pid":0,
 "id":1
 },
 {
 "children":[
  {
  "name":"昌平區(qū)",
  "pid":4,
  "id":5
  }
 ],
 "name":"北京市",
 "pid":0,
 "id":4
 }
]

代碼如下

 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 
 public static JSONArray listToTree(JSONArray arr, String id, String pid, String child) {
 JSONArray r = new JSONArray();
 JSONObject hash = new JSONObject();
 //將數(shù)組轉(zhuǎn)為Object的形式,key為數(shù)組中的id
 for (int i = 0; i < arr.size(); i++) {
  JSONObject json = (JSONObject) arr.get(i);
  hash.put(json.getString(id), json);
 }
 //遍歷結(jié)果集
 for (int j = 0; j < arr.size(); j++) {
  //單條記錄
  JSONObject aVal = (JSONObject) arr.get(j);
  //在hash中取出key為單條記錄中pid的值
  String pidStr = "";
  Object pidObj = aVal.get(pid);
  if (aVal.get(pid) != null) {
  pidStr = aVal.get(pid).toString();
  }
  JSONObject hashVP = (JSONObject) hash.get(pidStr);
  //如果記錄的pid存在,則說明它有父節(jié)點(diǎn),將她添加到孩子節(jié)點(diǎn)的集合中
  if (hashVP != null) {
  //檢查是否有child屬性
  if (hashVP.get(child) != null) {
   JSONArray ch = (JSONArray) hashVP.get(child);
   ch.add(aVal);
   hashVP.put(child, ch);
  } else {
   JSONArray ch = new JSONArray();
   ch.add(aVal);
   hashVP.put(child, ch);
  }
  } else {
  r.add(aVal);
  }
 }
 return r;
 }
public static void main(String[] args){
 List<Map<String,Object>> data = new ArrayList<>();
 Map<String,Object> map = new HashMap<>();
 map.put("id",1);
 map.put("pid",0);
 map.put("name","甘肅省");
 data.add(map);
 Map<String,Object> map2 = new HashMap<>();
 map2.put("id",2);
 map2.put("pid",1);
 map2.put("name","天水市");
 data.add(map2);
 Map<String,Object> map3 = new HashMap<>();
 map3.put("id",3);
 map3.put("pid",2);
 map3.put("name","秦州區(qū)");
 data.add(map3);
 Map<String,Object> map4 = new HashMap<>();
 map4.put("id",4);
 map4.put("pid",0);
 map4.put("name","北京市");
 data.add(map4);
 Map<String,Object> map5 = new HashMap<>();
 map5.put("id",5);
 map5.put("pid",4);
 map5.put("name","昌平區(qū)");
 data.add(map5);
 System.out.println(JSON.toJSONString(data));
 JSONArray result = 
 listToTree(JSONArray.parseArray(JSON.toJSONString(data)),"id","pid","children");
 System.out.println(JSON.toJSONString(result));
}

以上這篇java后端把數(shù)據(jù)轉(zhuǎn)換為樹,map遞歸生成json樹,返回給前端(后臺(tái)轉(zhuǎn)換)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)FIFO任務(wù)調(diào)度隊(duì)列策略

    Java實(shí)現(xiàn)FIFO任務(wù)調(diào)度隊(duì)列策略

    在工作中,很多高并發(fā)的場(chǎng)景中,我們會(huì)用到隊(duì)列來實(shí)現(xiàn)大量的任務(wù)請(qǐng)求。當(dāng)任務(wù)需要某些特殊資源的時(shí)候,我們還需要合理的分配資源,讓隊(duì)列中的任務(wù)高效且有序完成任務(wù)。本文將為大家介紹通過java實(shí)現(xiàn)FIFO任務(wù)調(diào)度,需要的可以參考一下
    2021-12-12
  • java數(shù)據(jù)結(jié)構(gòu)ArrayList詳解

    java數(shù)據(jù)結(jié)構(gòu)ArrayList詳解

    本文詳細(xì)講解了java數(shù)據(jù)結(jié)構(gòu)ArrayList的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • java isInterrupted()判斷線程的實(shí)例講解

    java isInterrupted()判斷線程的實(shí)例講解

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于java isInterrupted()判斷線程的實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-05-05
  • 詳解java數(shù)組進(jìn)行翻轉(zhuǎn)的方法有哪些

    詳解java數(shù)組進(jìn)行翻轉(zhuǎn)的方法有哪些

    這篇文章主要介紹了詳解java數(shù)組進(jìn)行翻轉(zhuǎn)的方法有哪些,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Lombok插件的安裝與簡(jiǎn)單使用步驟

    Lombok插件的安裝與簡(jiǎn)單使用步驟

    這篇文章主要介紹了Lombok插件的安裝與簡(jiǎn)單使用步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 詳解Java SpringAOP切面類

    詳解Java SpringAOP切面類

    這篇文章主要為大家介紹了Java SpringAOP的切面類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Java中自己如何實(shí)現(xiàn)log2(N)

    Java中自己如何實(shí)現(xiàn)log2(N)

    這篇文章主要介紹了Java中自己實(shí)現(xiàn)log2(N)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java執(zhí)行SQL語句實(shí)現(xiàn)查詢的通用方法詳解

    java執(zhí)行SQL語句實(shí)現(xiàn)查詢的通用方法詳解

    這篇文章主要介紹了java執(zhí)行SQL語句實(shí)現(xiàn)查詢的通用方法詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Spring Security賬戶與密碼驗(yàn)證實(shí)現(xiàn)過程

    Spring Security賬戶與密碼驗(yàn)證實(shí)現(xiàn)過程

    這篇文章主要介紹了Spring Security賬戶與密碼驗(yàn)證實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • Java中對(duì)象序列化與反序列化詳解

    Java中對(duì)象序列化與反序列化詳解

    這篇文章主要介紹了Java中對(duì)象序列化與反序列化,較為詳細(xì)的分析了java中對(duì)象序列化的概念、原理、實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09

最新評(píng)論