直接上菜,最终效果![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0e7daca5281b61654f626ff8c3e9f763.png)
添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>com.adobe.aem</groupId>
<artifactId>uber-jar</artifactId>
<version>6.5.17</version>
</dependency>
核心Code
package com.xxx.xxx.controller.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class ZdjTest {
public static void main(String[] args) {
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
Map<String, Object> subMap1 = new HashMap<String, Object>();
Map<String, Object> subMap2 = new HashMap<String, Object>();
Map<String, Object> subMap3 = new HashMap<String, Object>();
Map<String, Object> subMap4 = new HashMap<String, Object>();
Map<String, Object> subMap5 = new HashMap<String, Object>();
Map<String, Object> subMap6 = new HashMap<String, Object>();
Map<String, Object> subMap7 = new HashMap<String, Object>();
Map<String, Object> subMap8 = new HashMap<String, Object>();
subMap1.put("peron_busis_attr", "四川省");
subMap1.put("peron_busis_class", "南充县");
subMap1.put("peron_busis_subclass", "挑花小镇");
subMap2.put("peron_busis_attr", "四川省");
subMap2.put("peron_busis_class", "达州市");
subMap2.put("peron_busis_subclass", "");
subMap3.put("peron_busis_attr", "四川省");
subMap3.put("peron_busis_class", "南充县");
subMap3.put("peron_busis_subclass", "风车小镇");
subMap4.put("peron_busis_attr", "四川省");
subMap4.put("peron_busis_class", "南充县");
subMap4.put("peron_busis_subclass", "高铁小镇");
subMap5.put("peron_busis_attr", "四川省");
subMap5.put("peron_busis_class", "南充县");
subMap5.put("peron_busis_subclass", "玫瑰小镇");
subMap6.put("peron_busis_attr", "四川省");
subMap6.put("peron_busis_class", "南充县");
subMap6.put("peron_busis_subclass", "燕京小镇");
subMap7.put("peron_busis_attr", "湖北省");
subMap7.put("peron_busis_class", "宜昌市");
subMap7.put("peron_busis_subclass", "");
subMap8.put("peron_busis_attr", "湖北省");
subMap8.put("peron_busis_class", "荆州市");
subMap8.put("peron_busis_subclass", "");
result.add(subMap1);
result.add(subMap2);
result.add(subMap3);
result.add(subMap4);
result.add(subMap5);
result.add(subMap6);
result.add(subMap7);
result.add(subMap8);
List<Map<String, Object>> list = mapToTree(result, "one");
System.out.println(JSON.toJSONString(list));
}
private static List<Map<String, Object>> mapToTree(List<Map<String, Object>> result, String level) {
Map<String,Object> kkMap = new HashMap<String,Object>();
Map<String, List<Map<String, Object>>> departMap = result.stream()
.filter(map -> isNotBlank(getNameByLevel(map, level)))
.collect(Collectors.groupingBy(map -> getNameByLevel(map, level)));
System.out.println(departMap);
List<Map<String, Object>> resultList = Lists.newArrayList();
for (String key : departMap.keySet()) {
System.out.println("key--->" + key);
List<Map<String, Object>> mapList = departMap.get(key);
System.out.println("mapList--->" + mapList);
Map<String, Object> subMap = Maps.newHashMap();
subMap.put("position_name", key);
//前端显示方式
subMap.put("display_css", "hs");
if("one".equals(level)){
//树节点所在层级
subMap.put("department_level", "2");
subMap.put("display_css", "hh");
} else if("two".equals(level)){
if(0 < mapList.size() && mapList.size() < 2) {
subMap.put("parent_name", mapList.get(0).get("peron_busis_attr"));
}else if(mapList.size() > 1) {
subMap.put("parent_name", mapList.get(0).get("peron_busis_attr"));
}
subMap.put("department_level", "3");
} else if("three".equals(level)){
if(0 < mapList.size() && mapList.size() < 2) {
subMap.put("parent_name", mapList.get(0).get("peron_busis_attr") + "-" + mapList.get(0).get("peron_busis_class"));
}else if(mapList.size() > 1) {
subMap.put("parent_name", mapList.get(0).get("peron_busis_attr") + "-" + mapList.get(0).get("peron_busis_class"));
}
subMap.put("department_level", "4");
}
subMap.put("child_list", mapToTree(mapList, getNextLevel(level)));
if(mapList.size() == 1){
Map<String, Object> singleMap = mapList.get(0);
String attrStr = (String)singleMap.get("peron_busis_attr");
String classStr = (String)singleMap.get("peron_busis_class");
String subClassStr = (String)singleMap.get("peron_busis_subclass");
if(StringUtils.isNotBlank(attrStr)){
kkMap.put("peron_busis_attr", attrStr);
}if(StringUtils.isNotBlank(classStr)){
kkMap.put("peron_busis_class", classStr);
}if(StringUtils.isNotBlank(subClassStr)){
kkMap.put("peron_busis_subClass", subClassStr);
}
}
resultList.add(subMap);
}
return resultList;
}
public static String getNameByLevel(Map<String, Object> map, String level) {
if (StringUtils.isBlank(level)) {
return null;
}
switch (level) {
case "one":
return (String) map.get("peron_busis_attr");
case "two":
return (String) map.get("peron_busis_class");
case "three":
return (String) map.get("peron_busis_subclass");
default:
return null;
}
}
public static String getNextLevel(String level) {
if (StringUtils.isBlank(level)) {
return null;
}
switch (level) {
case "one":
return "two";
case "two":
return "three";
default:
return null;
}
}
}
运行结果
[{"child_list":[{"parent_name":"湖北省","child_list":[],"display_css":"hs","position_name":"荆州市","department_level":"3"},{"parent_name":"湖北省","child_list":[],"display_css":"hs","position_name":"宜昌市","department_level":"3"}],"display_css":"hh","position_name":"湖北省","department_level":"2"},{"child_list":[{"parent_name":"四川省","child_list":[{"parent_name":"四川省-南充县","child_list":[],"display_css":"hs","position_name":"挑花小镇","department_level":"4"},{"parent_name":"四川省-南充县","child_list":[],"display_css":"hs","position_name":"玫瑰小镇","department_level":"4"},{"parent_name":"四川省-南充县","child_list":[],"display_css":"hs","position_name":"高铁小镇","department_level":"4"},{"parent_name":"四川省-南充县","child_list":[],"display_css":"hs","position_name":"风车小镇","department_level":"4"},{"parent_name":"四川省-南充县","child_list":[],"display_css":"hs","position_name":"燕京小镇","department_level":"4"}],"display_css":"hs","position_name":"南充县","department_level":"3"},{"parent_name":"四川省","child_list":[],"display_css":"hs","position_name":"达州市","department_level":"3"}],"display_css":"hh","position_name":"四川省","department_level":"2"}]
上述结果可以通过JSON在线视图查看器查看。
查看器地址:http://www.bejson.com/jsonviewernew/
最后
自我介绍一下,小编13年毕业于厦门大学,14年在外包公司中软干过,后来去过微软、华为等大厂,20年进入鹅厂担任架构师,直到现在。这一路走来,深知大多数初中级java工程师,想要提升技能,往往需要自己长时间的摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率不仅低效而且还很漫长,很容易就碰到天花板致技术停止不前。 因此我收集整理了一份《java开发全套学习资料》送给大家,里面包含了Spring全家桶,MySQL,中间件Redis、kafka,MQ消息,Zookeeper等java全系列资料,非常适合初中高级各个阶段学习,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料。后面抽时间定期更新一些干货文章,如果你喜欢,也可添加下方名片学习交流 (๑◡๑)