1 创建省市区的数据库
CREATE TABLE "area_city" (
"id" int8 NOT NULL DEFAULT nextval('tb_national_city_id_seq'::regclass),
"code" text COLLATE "pg_catalog"."default",
"name" text COLLATE "pg_catalog"."default",
"invite_code" text COLLATE "pg_catalog"."default",
"parent_id" int8 DEFAULT 0,
"parent_code" text COLLATE "pg_catalog"."default",
"create_at" timestamp(6),
"pin_name" text COLLATE "pg_catalog"."default",
CONSTRAINT "tb_national_city_pkey" PRIMARY KEY ("id")
)
;
2 插入北京的数据
INSERT INTO "public"."tb_national_city" ("id", "code", "name", "invite_code", "parent_id", "parent_code", "create_at", "pin_name") VALUES (2, '110000', '北京市', '0', 0, '', '2018-05-08 15:30:29', 'beijingshi');
INSERT INTO "public"."tb_national_city" ("id", "code", "name", "invite_code", "parent_id", "parent_code", "create_at", "pin_name") VALUES (1, '110100', '北京市', '0', 2, '0', '2018-05-08 15:30:29', 'beijingshi');
INSERT INTO "public"."tb_national_city" ("id", "code", "name", "invite_code", "parent_id", "parent_code", "create_at", "pin_name") VALUES (3, '110101', '东城区', '0', 1, '0', '2018-05-08 15:30:29', 'dongchengqu');
INSERT INTO "public"."tb_national_city" ("id", "code", "name", "invite_code", "parent_id", "parent_code", "create_at", "pin_name") VALUES (37, '130000', '河北省', 'A', 0, NULL, '2018-05-08 15:30:29', 'hebeisheng');
INSERT INTO "public"."tb_national_city" ("id", "code", "name", "invite_code", "parent_id", "parent_code", "create_at", "pin_name") VALUES (38, '130100', '石家庄市', 'A', 37, 'A', '2018-05-08 15:30:29', 'shijiazhuangshi');
INSERT INTO "public"."tb_national_city" ("id", "code", "name", "invite_code", "parent_id", "parent_code", "create_at", "pin_name") VALUES (40, '130102', '长安区', NULL, 38, 'A', '2018-05-08 15:30:29', 'changanqu');
3 遍历数据
public class AreaCity {
private String code;
private String name;
private String inviteCode;
private Long parentId = 0L;
private String parentCode;
private String pinName;
private List<AreaCity> child = new ArrayList();
private String parentName;
public AreaCity() {
}
}
(方法一)
public List<AreaCity> listViewableCityEntityexc(String key){
List<AreaCity> list = nationalCityDao.listCityByParentId();
List<AreaCity> shengListoneLevelRegion = list.stream().filter(item -> item.getParentId().intValue()==0).collect(Collectors.toList());
//遍历一级地区
if(AreaEnums.SHI.name().equals(key)) {
shengListoneLevelRegion.stream().forEach(oneItem ->
{
//获得二级
List<AreaCity> twoLevelRegion = list.stream().filter(twoItem -> twoItem.getParentId().intValue() == oneItem.getId().intValue())
.collect(Collectors.toList());
//遍历二级
if (AreaEnums.QU.name().equals(key)) {
twoLevelRegion.stream().forEach(twoItem ->
{
//获得三级
List<AreaCity> threeLevelRegion = list.stream().filter(threeItem -> threeItem.getParentId().intValue() == twoItem.getId().intValue())
.collect(Collectors.toList());
twoItem.setChild(threeLevelRegion);
});
}
oneItem.setChild(twoLevelRegion);
}
);
}
return shengListoneLevelRegion;
}
(方法二)
public List<NationalCity> listViewableCityEntityexc(){
List<NationalCity> list = nationalCityDao.listCityByParentId();
List<NationalCity> shengListoneLevelRegion = list.stream().filter(item -> item.getParentId().intValue()==0).collect(Collectors.toList());
//遍历一级地区
shengListoneLevelRegion.stream().forEach(oneItem ->
{
//获得二级
List<NationalCity> twoLevelRegion = list.stream().filter(twoItem -> twoItem.getParentId().intValue() == oneItem.getId().intValue())
.collect(Collectors.toList());
//遍历二级
twoLevelRegion.stream().forEach(twoItem ->
{
//获得三级
List<NationalCity> threeLevelRegion = list.stream().filter(threeItem -> threeItem.getParentId().intValue() == twoItem.getId().intValue())
.collect(Collectors.toList());
twoItem.setChild(threeLevelRegion);
});
oneItem.setChild(twoLevelRegion);
}
);
return shengListoneLevelRegion;
}
4 返回的数据
image.png