省市县从数据库读出来的list数据转换成json格式的数据

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html

一,数据源

 1.1,数据库查出来的数据是

两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文的最后一张图片

1.2,要求转换成的json格式的数据

1.2.1,完整数据

json省市县数据源(这是全部的数据)

1.2.2,抽取的数据

 1 [
 2     {
 3         "Code": "410000",
 4         "Name": "河南省",
 5         "level": [
 6             {
 7                 "Code": "414500",
 8                 "Name": "郑州市",
 9                 "level": [
10                     {
11                         "Code": "414500",
12                         "Name": "二七区",
13                         "sort": 1
14                     },
15                     {
16                         "Code": "414500",
17                         "Name": "中原区",
18                         "sort": 2
19                     }
20                 ],
21                 "sort": 1
22             },
23             {
24                 "Code": "414530",
25                 "Name": "新乡市",
26                 "level": [
27                     {
28                         "Code": "414530",
29                         "Name": "卫滨区",
30                         "sort": 1
31                     },
32                     {
33                         "Code": "414530",
34                         "Name": "牧野区",
35                         "sort": 2
36                     }
37                 ],
38                 "sort": 2
39             }
40         ]
41     },
42     {
43         "Code": "410000",
44         "Name": "陕西省",
45         "level": [
46             {
47                 "Code": "414500",
48                 "Name": "汉中市",
49                 "level": [
50                     {
51                         "Code": "414500",
52                         "Name": "西乡县",
53                         "sort": 1
54                     },
55                     {
56                         "Code": "414500",
57                         "Name": "南郑县",
58                         "sort": 2
59                     }
60                 ],
61                 "sort": 1
62             },
63             {
64                 "Code": "414530",
65                 "Name": "宝鸡市",
66                 "level": [
67                     {
68                         "Code": "414530",
69                         "Name": "岐山县",
70                         "sort": 1
71                     },
72                     {
73                         "Code": "414530",
74                         "Name": "芙蓉县",
75                         "sort": 2
76                     }
77                 ],
78                 "sort": 2
79             }
80         ]
81     }
82 ]

 

 

二,转化的整体代码

2.1,代码总览

 1   /**
 2      * 查询省份城市区县
 3      * 
 4      * @return
 5      */
 6     public String queryFullZoneInfo() {
 7         List<Map<String, String>> mapList = zoneInfoService.queryFullZoneInfo();
 8         List<Map<String, Object>> zoneList = new ArrayList<Map<String, Object>>();
 9         Map<String, Object> existMap = new HashMap<String, Object>();
10         for (Map<String, String> map : mapList) {
11             String province = map.get("province");
12             Map<String, Object> provinceMap = null;
13             if (existMap.containsKey(province)) {
14                 provinceMap = (Map<String, Object>) existMap.get(province);
15             } else {
16                 provinceMap = new HashMap<String, Object>();
17                 existMap.put(province, provinceMap);
18                 zoneList.add(provinceMap);
19             }
20             
21             provinceMap.put("Code", map.get("provinceCode"));
22             provinceMap.put("Name", map.get("province"));
23             String city = map.get("city");
24             if (StringUtils.isNotEmpty(city)) {
25                 List<Map<String, Object>> provinceCityList = null;
26                 if (existMap.containsKey(province + "_")) {
27                     provinceCityList = (List<Map<String, Object>>) existMap.get(province + "_");
28                 } else {
29                     provinceCityList = new ArrayList<Map<String, Object>>();
30                     existMap.put(province + "_", provinceCityList);
31                     provinceMap.put("level", provinceCityList);
32                 }
33                 Map<String, Object> provinceCityMap = null;
34                 if (existMap.containsKey(province + "_" + city)) {
35                     provinceCityMap = (Map<String, Object>) existMap.get(province + "_" + city);
36                 } else {
37                     provinceCityMap = new HashMap<String, Object>();
38                     existMap.put(province + "_" + city, provinceCityMap);
39                     provinceCityList.add(provinceCityMap);
40                     String citySort = String.valueOf(existMap.get(province + "_sort"));
41                     existMap.put(province + "_sort", "null".equals(citySort) ? 1 : NumberUtils.toInt(citySort) + 1);
42                     provinceCityMap.put("sort", existMap.get(province + "_sort"));
43                 }
44                 
45                 provinceCityMap.put("Name", city);
46                 provinceCityMap.put("Code", map.get("cityCode"));
47                 
48                 
49                 List<Map<String, Object>> provinceCityCountryList = null;
50                 if (existMap.containsKey(province + "_" + city + "_")) {
51                     provinceCityCountryList = (List<Map<String, Object>>) existMap.get(province + "_" + city + "_");
52                 } else {
53                     provinceCityCountryList = new ArrayList<Map<String, Object>>();
54                     existMap.put(province + "_" + city + "_", provinceCityCountryList);
55                     provinceCityMap.put("level", provinceCityCountryList);
56                 }
57                 
58                 String country = map.get("country");
59                 Map<String, Object> provinceCityCountryMap = null;
60                 if (StringUtils.isNotEmpty(country)) {
61                     if (existMap.containsKey(province + "_" + city + "_" + country)) {
62                         provinceCityCountryMap = (Map<String, Object>) existMap.get(province + "_" + city + "_" + country);
63                     } else {
64                         provinceCityCountryMap = new HashMap<String, Object>();
65                         existMap.put(province + "_" + city + "_" + country, provinceCityCountryMap);
66                         provinceCityCountryList.add(provinceCityCountryMap);
67                         String countrySort = String.valueOf(existMap.get(province + "_" + city + "_sort"));
68                         existMap.put(province + "_" + city + "_sort", "null".equals(countrySort) ? 1 : NumberUtils.toInt(countrySort) + 1);
69                         provinceCityCountryMap.put("sort", existMap.get(province + "_" + city + "_sort"));
70                     }
71                     
72                     provinceCityCountryMap.put("Code", map.get("countryCode"));
73                     provinceCityCountryMap.put("Name", country);
74                 } else {
75                     provinceCityCountryMap = new HashMap<String, Object>();
76                     provinceCityCountryList.add(provinceCityCountryMap);
77                     provinceCityCountryMap.put("sort", 1);
78                     provinceCityCountryMap.put("Code", "");
79                     provinceCityCountryMap.put("Name", "");
80                 }
81             }
82         }
83         
84         try {
85             return JsonUtils.toJson(zoneList);
86         } catch (Exception e) {
87             e.printStackTrace();
88         }
89         
90         return null;
91     }

 

三,代码解析

3.1,json格式数据分析

从1.2.2的数据我们可以看到这个json所要求的数据是这个样子的

3.1.1,list

第一个大的list里面装的是34个省的对象组成的一个list集合。

3.1.2,map(对象)

每一个省中有code,和name的键值对,还有一个level的list集合

3.1.3,list

就是上面所说的level的集合,这个集合当中装的是每一个省里面的地级市的map对象

3.1.4,map(对象)

map对象里面有code,name的键值对,还有一个level的list集合,此外还有一个代表顺序的sort标示符

3.1.5,list

就是上面所说的level的集合,这个集合当中装的是每一个地级市里面装的县城的map对象

3.1.6,map(对象)

map对象里面有code,name的键值对,此外还有一个代表顺序的sort标示符,注意这个里面是没有list的集合了,因为它已经是最后一层了。

3.2,java代码分析

3.2.1,代码初步实现

根据上面的代码我们可以写出这样的代码

 1  public String queryFullZoneInfo() {
 2         List<Map<String, String>> mapList = zoneInfoService.queryFullZoneInfo();
 3         List<Map<String, Object>> zoneList = new ArrayList<Map<String, Object>>();
 4         Map<String, Object> existMap = new HashMap<String, Object>();
 5         Map<String, Object> provinceMap = new HashMap<String, Object>();
 6         Map<String, Object> provinceCityMap = new HashMap<String, Object>();
 7         List<Map<String, Object>> provinceCityList = new ArrayList<Map<String, Object>>();
 8         List<Map<String, Object>> provinceCityCountryList = new ArrayList<Map<String, Object>>();
 9         Map<String, Object> provinceCityCountryMap = new HashMap<String, Object>();
10         for (Map<String, String> map : mapList) {
11         zoneList = new ArrayList<Map<String, Object>>();
12          provinceMap = new HashMap<String, Object>();
13           provinceCityMap = new HashMap<String, Object>();
14             provinceMap.put("Code", map.get("provinceCode"));
15             provinceCityList = new ArrayList<Map<String, Object>>();
16             provinceCityCountryList = new ArrayList<Map<String, Object>>();
17             provinceCityCountryMap = new HashMap<String, Object>();
18             provinceMap.put("Name", map.get("province"));


19 provinceMap.put("level", provinceCityList);


20 provinceCityList.add(provinceCityMap);


21 provinceCityMap.put("Name", map.get("city")); 22 provinceCityMap.put("Code", map.get("cityCode"));


23 provinceCityMap.put("level", provinceCityCountryList);


24 provinceCityCountryList.add(provinceCityCountryMap);


25 provinceCityCountryMap.put("Code", map.get("countryCode")); 26 provinceCityCountryMap.put("Name", map.get("country")); 27 zoneList.add(provinceMap); 28 } 29 try { 30 return JsonUtils.toJson(zoneList); 31 } catch (Exception e) { 32 e.printStackTrace(); 33 } 34

 

 

注意上面空开的空格是和4.2做对比用的。

3.2.2,注意点

在上面的代码中虽然provinceMap是先把provinceCityList给put进去的,但是这不影响后面provinceCityList的取值,换句话就是当执行到这句

provinceMap.put("level", provinceCityList);

代码的时候,provinceCityList是null,只到这句代码

provinceCityList.add(provinceCityMap);
provinceCityMap.put("Name", map.get("city"));
provinceCityMap.put("Code", map.get("cityCode"));

执行完之后它才有的值,但同时注意了,provinceMap里面的provinceCityList也就有了值,这是后面给它赋值的。

3.2.3,注意点升级

 1 String province = map.get("province");
 2             Map<String, Object> provinceMap = null;
 3             if (existMap.containsKey(province)) {
 4                 provinceMap = (Map<String, Object>) existMap.get(province);
 5             } else {
 6                 provinceMap = new HashMap<String, Object>();
 7                 existMap.put(province, provinceMap);{黑龙江省={Name=黑龙江省, Code=230000}}
 8                 zoneList.add(provinceMap);
 9             }
10             
11             provinceMap.put("Code", map.get("provinceCode"));
12             provinceMap.put("Name", map.get("province"));
13             注意理解上面的代码:
14             是先申明了一个map,注意第一遍走的时候existMap.put(province, provinceMap);它是空的
15             但是当走到provinceMap.put("Code", map.get("provinceCode"));
16             provinceMap.put("Name", map.get("province"));这两行的时候它会把值给塞进去,
17             这时候existMap里面有值了
18             即使如果不走else里面的语句,也会把值给塞进去的。

 

3.2.4,问题点

假如像上面那样去解决问题的话,那么后面的代码永远会把前面的代码给覆盖掉的,

因为每一次都是new的一个对象。所以到最后上万条的数据,只会出来最后一条数据,

比如我测试的结果

 1 [
 2     {
 3         "Code": "310000",
 4         "Name": "上海市",
 5         "level": [
 6             {
 7                 "Code": "310100",
 8                 "Name": "上海市",
 9                 "level": [
10                     {
11                         "Code": "2909",
12                         "Name": "长宁区"
13                     }
14                 ]
15             }
16         ]
17     }
18 ]

 

最后返回的就是这一条数据,完全不是自己要的东西。

四,解决方法

4.1,代码

 

和2.1的代码是一么一样的。

4.2,注意点

这句代码就是在原来的基础上加了一个existMap的双例集合

我们把2.1的代码分开来读就会更加清晰

1 if (existMap.containsKey(province + "_")) {
2                     provinceCityList = (List<Map<String, Object>>) existMap.get(province + "_");
3                 } else {
4                     provinceCityList = new ArrayList<Map<String, Object>>();
5                     existMap.put(province + "_", provinceCityList);
6                     provinceMap.put("level", provinceCityList);
7                 }

 

 

 1 if (existMap.containsKey(province + "_" + city)) {
 2                     provinceCityMap = (Map<String, Object>) existMap.get(province + "_" + city);
 3                 } else {
 4                     provinceCityMap = new HashMap<String, Object>();
 5                     existMap.put(province + "_" + city, provinceCityMap);
 6                     provinceCityList.add(provinceCityMap);
 7                     String citySort = String.valueOf(existMap.get(province + "_sort"));
 8                     existMap.put(province + "_sort", "null".equals(citySort) ? 1 : NumberUtils.toInt(citySort) + 1);
 9                     provinceCityMap.put("sort", existMap.get(province + "_sort"));
10                 }

 

 

1 if (existMap.containsKey(province + "_" + city + "_")) {
2                     provinceCityCountryList = (List<Map<String, Object>>) existMap.get(province + "_" + city + "_");
3                 } else {
4                     provinceCityCountryList = new ArrayList<Map<String, Object>>();
5                     existMap.put(province + "_" + city + "_", provinceCityCountryList);
6                     provinceCityMap.put("level", provinceCityCountryList);
7                 }

 

 

 1 if (existMap.containsKey(province + "_" + city + "_" + country)) {
 2                         provinceCityCountryMap = (Map<String, Object>) existMap.get(province + "_" + city + "_" + country);
 3                     } else {
 4                         provinceCityCountryMap = new HashMap<String, Object>();
 5                         existMap.put(province + "_" + city + "_" + country, provinceCityCountryMap);
 6                         provinceCityCountryList.add(provinceCityCountryMap);
 7                         String countrySort = String.valueOf(existMap.get(province + "_" + city + "_sort"));
 8                         existMap.put(province + "_" + city + "_sort", "null".equals(countrySort) ? 1 : NumberUtils.toInt(countrySort) + 1);
 9                         provinceCityCountryMap.put("sort", existMap.get(province + "_" + city + "_sort"));
10                     }

 

4.3,解析existMap作用

因为假如现在没有这个map集合就会产生覆盖的作用,现在这个map的作用就是把取出来的值以不同的名字取出来放到map集合中来,假如下一次再去取的时候如果有就不在新建对象了,直接用原来的就行了,如果没有在建立新的对象。

这就解决了覆盖的问题。

同时也给sort排上了序号。

用下面的例子来说明

有就取原来的,没有就新建,这样的话就会把后面新的数据加到前面有的数据里面
举个例子,假如现在是河南省map1里面有name,code,和sort,leval集合,第一遍是地级市是安阳,当第二遍循环的时候,还是取省份这时候还是河南省,就不会新建一个map了,而是还是取原来的map1,这时候假如是新乡市,就会把新乡市,同样加在这个map当中,这样一个map当中就会有两个leval了
假如现在不是河南省了,而是陕西省了,就会新建一个map2,会把它里面的数据加载这个map2当中,
map1,map2装在一个list中返回,就有效的避免了第一种情况的产生了。

其中市县和上面也是同样的道理。

注意这个existMap里面装的数据会特别的多,比返回的provinceMap大了几万倍呢。

 

我们以上面的json的数据来手动遍历几遍。

4.3.1,首次遍历

 1 {
 2     "Code": "410000",
 3     "Name": "河南省",
 4     "level": [
 5         {
 6             "Code": "414500",
 7             "Name": "郑州市",
 8             "level": [
 9                 {
10                     "Code": "414500",
11                     "Name": "二七区",
12                     "sort": 1
13                 }
14             ],
15             "sort": 1
16         }
17     ]
18 }

 

4.3.2,2遍

 1 {
 2     "Code": "410000",
 3     "Name": "河南省",
 4     "level": [
 5         {
 6             "Code": "414500",
 7             "Name": "郑州市",
 8             "level": [
 9                 {
10                     "Code": "414500",
11                     "Name": "二七区",
12                     "sort": 1
13                 },
14                 {
15                     "Code": "414500",
16                     "Name": "中原区",
17                     "sort": 2
18                 }
19             ],
20             "sort": 1
21         }
22     ]
23 }

 

 

4.3.3,3遍

 1 {
 2     "Code": "410000",
 3     "Name": "河南省",
 4     "level": [
 5         {
 6             "Code": "414500",
 7             "Name": "郑州市",
 8             "level": [
 9                 {
10                     "Code": "414500",
11                     "Name": "二七区",
12                     "sort": 1
13                 },
14                 {
15                     "Code": "414500",
16                     "Name": "中原区",
17                     "sort": 2
18                 }
19             ],
20             "sort": 1
21         },
22         {
23             "Code": "414530",
24             "Name": "新乡市",
25             "level": [
26                 {
27                     "Code": "414530",
28                     "Name": "卫滨区",
29                     "sort": 1
30                 }
31             ],
32             "sort": 2
33         }
34     ]
35 }

 

4.3.4,4遍

 1 {
 2     "Code": "410000",
 3     "Name": "河南省",
 4     "level": [
 5         {
 6             "Code": "414500",
 7             "Name": "郑州市",
 8             "level": [
 9                 {
10                     "Code": "414500",
11                     "Name": "二七区",
12                     "sort": 1
13                 },
14                 {
15                     "Code": "414500",
16                     "Name": "中原区",
17                     "sort": 2
18                 }
19             ],
20             "sort": 1
21         },
22         {
23             "Code": "414530",
24             "Name": "新乡市",
25             "level": [
26                 {
27                     "Code": "414530",
28                     "Name": "卫滨区",
29                     "sort": 1
30                 },
31                 {
32                     "Code": "414530",
33                     "Name": "牧野区",
34                     "sort": 2
35                 }
36             ],
37             "sort": 2
38         }
39     ]
40 }

 

4.3.5,5遍

 1 [
 2     {
 3         "Code": "410000",
 4         "Name": "河南省",
 5         "level": [
 6             {
 7                 "Code": "414500",
 8                 "Name": "郑州市",
 9                 "level": [
10                     {
11                         "Code": "414500",
12                         "Name": "二七区",
13                         "sort": 1
14                     },
15                     {
16                         "Code": "414500",
17                         "Name": "中原区",
18                         "sort": 2
19                     }
20                 ],
21                 "sort": 1
22             },
23             {
24                 "Code": "414530",
25                 "Name": "新乡市",
26                 "level": [
27                     {
28                         "Code": "414530",
29                         "Name": "卫滨区",
30                         "sort": 1
31                     },
32                     {
33                         "Code": "414530",
34                         "Name": "牧野区",
35                         "sort": 2
36                     }
37                 ],
38                 "sort": 2
39             }
40         ]
41     },
42     {
43         "Code": "410000",
44         "Name": "陕西省",
45         "level": [
46             {
47                 "Code": "414500",
48                 "Name": "汉中市",
49                 "level": [
50                     {
51                         "Code": "414500",
52                         "Name": "西乡县",
53                         "sort": 1
54                     }
55                 ],
56                 "sort": 1
57             }
58         ]
59     }
60 ]

 

4.3.6,6遍

 1 [
 2     {
 3         "Code": "410000",
 4         "Name": "河南省",
 5         "level": [
 6             {
 7                 "Code": "414500",
 8                 "Name": "郑州市",
 9                 "level": [
10                     {
11                         "Code": "414500",
12                         "Name": "二七区",
13                         "sort": 1
14                     },
15                     {
16                         "Code": "414500",
17                         "Name": "中原区",
18                         "sort": 2
19                     }
20                 ],
21                 "sort": 1
22             },
23             {
24                 "Code": "414530",
25                 "Name": "新乡市",
26                 "level": [
27                     {
28                         "Code": "414530",
29                         "Name": "卫滨区",
30                         "sort": 1
31                     },
32                     {
33                         "Code": "414530",
34                         "Name": "牧野区",
35                         "sort": 2
36                     }
37                 ],
38                 "sort": 2
39             }
40         ]
41     },
42     {
43         "Code": "410000",
44         "Name": "陕西省",
45         "level": [
46             {
47                 "Code": "414500",
48                 "Name": "汉中市",
49                 "level": [
50                     {
51                         "Code": "414500",
52                         "Name": "西乡县",
53                         "sort": 1
54                     },
55                     {
56                         "Code": "414500",
57                         "Name": "南郑县",
58                         "sort": 2
59                     }
60                 ],
61                 "sort": 1
62             }
63         ]
64     }
65 ]

 

4.3.7,7遍

 1 [
 2     {
 3         "Code": "410000",
 4         "Name": "河南省",
 5         "level": [
 6             {
 7                 "Code": "414500",
 8                 "Name": "郑州市",
 9                 "level": [
10                     {
11                         "Code": "414500",
12                         "Name": "二七区",
13                         "sort": 1
14                     },
15                     {
16                         "Code": "414500",
17                         "Name": "中原区",
18                         "sort": 2
19                     }
20                 ],
21                 "sort": 1
22             },
23             {
24                 "Code": "414530",
25                 "Name": "新乡市",
26                 "level": [
27                     {
28                         "Code": "414530",
29                         "Name": "卫滨区",
30                         "sort": 1
31                     },
32                     {
33                         "Code": "414530",
34                         "Name": "牧野区",
35                         "sort": 2
36                     }
37                 ],
38                 "sort": 2
39             }
40         ]
41     },
42     {
43         "Code": "410000",
44         "Name": "陕西省",
45         "level": [
46             {
47                 "Code": "414500",
48                 "Name": "汉中市",
49                 "level": [
50                     {
51                         "Code": "414500",
52                         "Name": "西乡县",
53                         "sort": 1
54                     },
55                     {
56                         "Code": "414500",
57                         "Name": "南郑县",
58                         "sort": 2
59                     }
60                 ],
61                 "sort": 1
62             },
63             {
64                 "Code": "414530",
65                 "Name": "宝鸡市",
66                 "level": [
67                     {
68                         "Code": "414530",
69                         "Name": "岐山县",
70                         "sort": 1
71                     }
72                 ],
73                 "sort": 2
74             }
75         ]
76     }
77 ]

 

4.3.8,8遍

 1 [
 2     {
 3         "Code": "410000",
 4         "Name": "河南省",
 5         "level": [
 6             {
 7                 "Code": "414500",
 8                 "Name": "郑州市",
 9                 "level": [
10                     {
11                         "Code": "414500",
12                         "Name": "二七区",
13                         "sort": 1
14                     },
15                     {
16                         "Code": "414500",
17                         "Name": "中原区",
18                         "sort": 2
19                     }
20                 ],
21                 "sort": 1
22             },
23             {
24                 "Code": "414530",
25                 "Name": "新乡市",
26                 "level": [
27                     {
28                         "Code": "414530",
29                         "Name": "卫滨区",
30                         "sort": 1
31                     },
32                     {
33                         "Code": "414530",
34                         "Name": "牧野区",
35                         "sort": 2
36                     }
37                 ],
38                 "sort": 2
39             }
40         ]
41     },
42     {
43         "Code": "410000",
44         "Name": "陕西省",
45         "level": [
46             {
47                 "Code": "414500",
48                 "Name": "汉中市",
49                 "level": [
50                     {
51                         "Code": "414500",
52                         "Name": "西乡县",
53                         "sort": 1
54                     },
55                     {
56                         "Code": "414500",
57                         "Name": "南郑县",
58                         "sort": 2
59                     }
60                 ],
61                 "sort": 1
62             },
63             {
64                 "Code": "414530",
65                 "Name": "宝鸡市",
66                 "level": [
67                     {
68                         "Code": "414530",
69                         "Name": "岐山县",
70                         "sort": 1
71                     },
72                     {
73                         "Code": "414530",
74                         "Name": "芙蓉县",
75                         "sort": 2
76                     }
77                 ],
78                 "sort": 2
79             }
80         ]
81     }
82 ]

 

致此一个流程走完就大概知道它的一个流程了。

五,优化

5.1,优化一

因为existMap数据是特别大的,所以每当我们遍历完一个省份之后就把里面的数据清除

1 String province = map.get("province");
2             Map<String, Object> provinceMap = null;
3             if(province!=existMap.get("province")){
4                 existMap.clear(); 
5             }
6             

 

 

拿这一次的取出来的province和existMap里面的province对比,假如有就继续遍历,假如没有就说明换省份了,清空exitMap,这样会提升效率。

5.2,优化二

最后一次就不用王existMap里面放值了,因为我们知道没遍历一次省市可能一样,但是县绝对是不一样的。

 

 1     String country = map.get("country");
 2                 Map<String, Object> provinceCityCountryMap = null;
 3                 if (StringUtils.isNotEmpty(country)) {
 4                     
 5                         provinceCityCountryMap = new HashMap<String, Object>();
 6                         provinceCityCountryList.add(provinceCityCountryMap);
 7                         String countrySort = String.valueOf(existMap.get(province + "_" + city + "_sort"));
 8                         existMap.put(province + "_" + city + "_sort", "null".equals(countrySort) ? 1 : NumberUtils.toInt(countrySort) + 1);
 9                         provinceCityCountryMap.put("sort", existMap.get(province + "_" + city + "_sort"));
10                     
11                     
12                     provinceCityCountryMap.put("Code", map.get("countryCode"));
13                     provinceCityCountryMap.put("Name", country);

 5.3,优化完之后完整的代码

 1   public String queryFullZoneInfo() {
 2         List<Map<String, String>> mapList = zoneInfoService.queryFullZoneInfo();
 3         List<Map<String, Object>> zoneList = new ArrayList<Map<String, Object>>();
 4         Map<String, Object> existMap = new HashMap<String, Object>();
 5         for (Map<String, String> map : mapList) {
 6             String province = map.get("province");
 7             Map<String, Object> provinceMap = null;
 8             if(province!=existMap.get("province")){
 9                 existMap.clear(); 
10             }
11             
12             if (existMap.containsKey(province)) {
13                 provinceMap = (Map<String, Object>) existMap.get(province);
14             } else {
15                 provinceMap = new HashMap<String, Object>();
16                 existMap.put(province, provinceMap);
17                 zoneList.add(provinceMap);
18             }
19             
20             provinceMap.put("Code", map.get("provinceCode"));
21             provinceMap.put("Name", map.get("province"));
22             String city = map.get("city");
23             if (StringUtils.isNotEmpty(city)) {
24                 List<Map<String, Object>> provinceCityList = null;
25                 if (existMap.containsKey(province + "_")) {
26                     provinceCityList = (List<Map<String, Object>>) existMap.get(province + "_");
27                 } else {
28                     provinceCityList = new ArrayList<Map<String, Object>>();
29                     existMap.put(province + "_", provinceCityList);
30                     provinceMap.put("level", provinceCityList);
31                 }
32                 Map<String, Object> provinceCityMap = null;
33                 if (existMap.containsKey(province + "_" + city)) {
34                     provinceCityMap = (Map<String, Object>) existMap.get(province + "_" + city);
35                 } else {
36                     provinceCityMap = new HashMap<String, Object>();
37                     existMap.put(province + "_" + city, provinceCityMap);
38                     provinceCityList.add(provinceCityMap);
39                     String citySort = String.valueOf(existMap.get(province + "_sort"));
40                     existMap.put(province + "_sort", "null".equals(citySort) ? 1 : NumberUtils.toInt(citySort) + 1);
41                     provinceCityMap.put("sort", existMap.get(province + "_sort"));
42                 }
43                 
44                 provinceCityMap.put("Name", city);
45                 provinceCityMap.put("Code", map.get("cityCode"));
46                 
47                 
48                 List<Map<String, Object>> provinceCityCountryList = null;
49                 if (existMap.containsKey(province + "_" + city + "_")) {
50                     provinceCityCountryList = (List<Map<String, Object>>) existMap.get(province + "_" + city + "_");
51                 } else {
52                     provinceCityCountryList = new ArrayList<Map<String, Object>>();
53                     existMap.put(province + "_" + city + "_", provinceCityCountryList);
54                     provinceCityMap.put("level", provinceCityCountryList);
55                 }
56                 
57                 String country = map.get("country");
58                 Map<String, Object> provinceCityCountryMap = null;
59                 if (StringUtils.isNotEmpty(country)) {
60                     
61                         provinceCityCountryMap = new HashMap<String, Object>();
62                         provinceCityCountryList.add(provinceCityCountryMap);
63                         String countrySort = String.valueOf(existMap.get(province + "_" + city + "_sort"));
64                         existMap.put(province + "_" + city + "_sort", "null".equals(countrySort) ? 1 : NumberUtils.toInt(countrySort) + 1);
65                         provinceCityCountryMap.put("sort", existMap.get(province + "_" + city + "_sort"));
66                     
67                     
68                     provinceCityCountryMap.put("Code", map.get("countryCode"));
69                     provinceCityCountryMap.put("Name", country);
70                 } else {
71                     provinceCityCountryMap = new HashMap<String, Object>();
72                     provinceCityCountryList.add(provinceCityCountryMap);
73                     provinceCityCountryMap.put("sort", 1);
74                     provinceCityCountryMap.put("Code", "");
75                     provinceCityCountryMap.put("Name", "");
76                 }
77             }
78         }
79         
80         try {
81             return JsonUtils.toJson(zoneList);
82         } catch (Exception e) {
83             e.printStackTrace();
84         }
85         
86         return null;
87     }
88     

 

 

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值