获取完整的地区名称,包括上级省市。
输入:{regioncode=140121,regionname=清徐县}
输出:中国-山西-太原-清徐
/**
* 获取完整省市名称
* @param region{regioncode=140121,regionname=清徐县}
* @return 中国-山西-太原-清徐
*/
private String getFullRegionName(Map region) {
if(region.get("regioncode")==null) return "";
String endRegionCode = "100000";//中国为结束节点
if(endRegionCode.equals(region.get("regioncode"))){
return (String) region.get("regionname");
}else{
Map parentRegion = mallDao.getParentRegion((String)region.get("regioncode"));//自己获取上级省市的代码
return getFullRegionName(parentRegion)+"-"+region.get("regionname");
}
}
public static void main(String[] args) {
CoalMallService instance = (CoalMallService) CoalMallService.getInstance();
Map region = new HashMap();
region.put("regioncode","140121");
region.put("regionname","清徐县");
String fullRegionName = instance.getFullRegionName(region);
System.out.println(fullRegionName);
}
获取树形数据
输入:140000 //山西
输出:[{
REGIONCODE=140100,
REGIONNAME=太原市,
isparent=true,
children=[{
REGIONCODE=140105,
REGIONNAME=小店区
},
{
REGIONCODE=140106,
REGIONNAME=迎泽区
},……
private List getFullChildRegions(String regionCode){
List<Map> regions = mallDao.getRegions(regionCode);//根据上级地区编码获取下级地区列表
if(CollectionUtils.isEmpty(regions)){
return regions;
}else{
for(Map map:regions){
List regions2 = getFullChildRegions((String) map.get("regioncode"));
if(CollectionUtils.isNotEmpty(regions2)){
map.put("isparent", true);
map.put("children", regions2);
}
}
}
return regions;
}
public static void main(String[] args) {
CoalMallService instance = (CoalMallService) CoalMallService.getInstance();
List list = instance.getFullChildRegions("140000");
System.out.println(list);
}
另一个版本:获取完整的地区名称,包括上级省市
/**
* 获取完整省市名称
* @param region {regioncode=141000,regionname=临汾市}
* @return 中国 山西省 临汾市
*/
private String getFullRegionName(Map region) {
if(region.get("regioncode")==null) return "";
String fullRegionName = (String) region.get("regionname");
String rootRegionCode = "100000";
Map<String,String> parentRegion = mallDao.getParentRegion((String)region.get("regioncode"));
if(parentRegion==null) return fullRegionName;
if(rootRegionCode.equals(parentRegion.get("regioncode"))){
fullRegionName = parentRegion.get("regionname")+" "+fullRegionName;
}else{
fullRegionName = getFullRegionName(parentRegion)+" "+fullRegionName;
}
return fullRegionName;
}
这是重构getFullRegionName方法前的写法,是不成熟,没理解递归的写法。对比和重构后的写法,要注意的是:
1,首先理解递归出口。
if(endRegionCode.equals(region.get("regioncode"))){
return (String) region.get("regionname");
}
2,根据递归出口,循环递归。
else{
Map parentRegion = mallDao.getParentRegion((String)region.get("regioncode"));//自己获取上级省市的代码
return getFullRegionName(parentRegion)+"-"+region.get("regionname");
}
参考资料:
递归算法
递归算法及经典递归例子代码实现