java遍历二级城市_java8用Lambda遍历省市区三级数据

本文展示了如何使用Java8的Lambda表达式遍历省市区三级数据,包括创建数据库表并插入北京数据,以及两种不同的遍历方法,一种耗时较长,另一种效率较高。
摘要由CSDN通过智能技术生成

1  创建省市区的数据库

CREATE TABLE `m_area_code` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',

`code` int(10) NOT NULL COMMENT '省份code',

`parent_code` int(10) NOT NULL DEFAULT 0 COMMENT '父级code',

`area_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

PRIMARY KEY (`id`) USING BTREE,

INDEX `index_areacode_code`(`code`) USING BTREE,

INDEX `index_areacode_pcode`(`parent_code`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 4069 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '行政区划' ROW_FORMAT = Dynamic;

2 插入北京的数据

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (12, 110000, 0, '北京市', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (425, 110100, 110000, '北京市', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (814, 110101, 110100, '东城区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (815, 110102, 110100, '西城区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (816, 110105, 110100, '朝阳区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (817, 110106, 110100, '丰台区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (818, 110107, 110100, '石景山区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (819, 110108, 110100, '海淀区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (820, 110109, 110100, '门头沟区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (821, 110111, 110100, '房山区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (822, 110112, 110100, '通州区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (823, 110113, 110100, '顺义区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (824, 110114, 110100, '昌平区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (825, 110115, 110100, '大兴区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (826, 110116, 110100, '怀柔区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (827, 110117, 110100, '平谷区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (828, 110118, 110100, '密云区', NULL);

INSERT INTO `medical`.`m_area_code`(`id`, `code`, `parent_code`, `area_name`, `pinyin`) VALUES (829, 110119, 110100, '延庆区', NULL);

3 遍历数据

(方法一:比较耗时)

ListmAreaCodeList = mAreaCodeService.selectList();

ListoneLevelRegion = mAreaCodeList.stream().filter(item -> item.getParentCode() == 0).collect(Collectors.toList());

//遍历一级地区

oneLevelRegion.stream().forEach( oneItem ->

{

//获得二级地区 地级市、地区、自治州、盟

ListtwoLevelRegion = mAreaCodeList.stream().filter(twoItem ->

StringUtils.equals(String.valueOf(twoItem.getParentCode()),String.valueOf(oneItem.getCode())))

.collect(Collectors.toList());

//遍历二级地区

twoLevelRegion.stream().forEach( twoItem ->

{

//获得三级地区 市辖区、县级市、县

ListthreeLevelRegion = mAreaCodeList.stream().filter(threeItem ->

StringUtils.equals(String.valueOf(threeItem.getParentCode()) , String.valueOf(twoItem.getCode())))

.collect(Collectors.toList());

twoItem.setMAreaCodeList(threeLevelRegion);

});

oneItem.setMAreaCodeList(twoLevelRegion);

}

);

result.setData(oneLevelRegion);

(方法二:耗时比较短)

ListmAreaCodeList2 = mAreaCodeService.selectList();

ListresultList = new ArrayList<>(32);

MapareaMap = new HashMap<>(mAreaCodeList2.size());

mAreaCodeList2.forEach(area ->{

MAreaCodeVo vo = areaMap.get(area.getId());

if(vo==null){

vo= new MAreaCodeVo();

vo.setMAreaCodeList(new ArrayList<>());

areaMap.put(area.getCode(),vo);

}

vo.setId(area.getId());

vo.setCode(area.getCode());

vo.setAreaName(area.getAreaName());

vo.setParentCode(area.getParentCode());

Integer parentId = area.getParentCode();

if(parentId >0){

MAreaCodeVo parentVo = areaMap.get(parentId);

if(Objects.isNull(parentVo)){

parentVo = new MAreaCodeVo();

parentVo.setId(parentId);

parentVo.setMAreaCodeList(new ArrayList<>());

areaMap.put(vo.getId(),parentVo);

}

parentVo.getMAreaCodeList().add(vo);

}else{

resultList.add(vo);

}

});

result.setData(resultList);

4 返回的数据

{

"id": 12,

"code": 110000,

"parentCode": 0,

"areaName": "北京市",

"pinyin": null,

"mareaCodeList": [

{

"id": 425,

"code": 110100,

"parentCode": 110000,

"areaName": "北京市",

"pinyin": null,

"mareaCodeList": [

{

"id": 814,

"code": 110101,

"parentCode": 110100,

"areaName": "东城区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 815,

"code": 110102,

"parentCode": 110100,

"areaName": "西城区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 816,

"code": 110105,

"parentCode": 110100,

"areaName": "朝阳区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 817,

"code": 110106,

"parentCode": 110100,

"areaName": "丰台区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 818,

"code": 110107,

"parentCode": 110100,

"areaName": "石景山区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 819,

"code": 110108,

"parentCode": 110100,

"areaName": "海淀区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 820,

"code": 110109,

"parentCode": 110100,

"areaName": "门头沟区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 821,

"code": 110111,

"parentCode": 110100,

"areaName": "房山区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 822,

"code": 110112,

"parentCode": 110100,

"areaName": "通州区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 823,

"code": 110113,

"parentCode": 110100,

"areaName": "顺义区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 824,

"code": 110114,

"parentCode": 110100,

"areaName": "昌平区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 825,

"code": 110115,

"parentCode": 110100,

"areaName": "大兴区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 826,

"code": 110116,

"parentCode": 110100,

"areaName": "怀柔区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 827,

"code": 110117,

"parentCode": 110100,

"areaName": "平谷区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 828,

"code": 110118,

"parentCode": 110100,

"areaName": "密云区",

"pinyin": null,

"mareaCodeList": null

},

{

"id": 829,

"code": 110119,

"parentCode": 110100,

"areaName": "延庆区",

"pinyin": null,

"mareaCodeList": null

}

]

}

]

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值