假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过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