java8用Lambda遍历省市区三级数据

 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 遍历数据

(方法一:比较耗时)

List mAreaCodeList = mAreaCodeService.selectList();
            List oneLevelRegion = mAreaCodeList.stream().filter(item -> item.getParentCode() == 0).collect(Collectors.toList());
            //遍历一级地区
            oneLevelRegion.stream().forEach( oneItem ->
                    {
                        //获得二级地区 地级市、地区、自治州、盟
                        List twoLevelRegion = mAreaCodeList.stream().filter(twoItem ->
                                StringUtils.equals(String.valueOf(twoItem.getParentCode()),String.valueOf(oneItem.getCode())))
                                .collect(Collectors.toList());
                        //遍历二级地区
                        twoLevelRegion.stream().forEach( twoItem ->
                        {
                            //获得三级地区 市辖区、县级市、县
                            List threeLevelRegion = 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);

(方法二:耗时比较短)

 List mAreaCodeList2 = mAreaCodeService.selectList();
            List resultList = new ArrayList<>(32);
            Map  areaMap = 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
                        }
                    ]
                }
            ]
        }

 

 

你可能感兴趣的:(java)