Java 省市区数据修改总结

StringUtils.isNumeric判断是否是数字字符串

map迭代的四种方式

字典服务里面的省市区数据需要修改,例如 广东省佛山市顺德区 --> 顺德区。在修改的过程中学到了 java关于判断是否是数字类型; Map 类型的迭代

要求:

/**
     * 修改省市区数据:
     * 广东省佛山市顺德区 --> 顺德区
     * 广东省佛山市 --> 佛山市
     * 广东省 --> 广东省
     */

实现:

//持久层的框架使用的是 JPA

public void process() {

    List<CodeLibraryEntity> codeLibraryEntityList = codeLibraryRepository.findAllByStatus(TableStatusEnum.NORMAL_STATUS.getCode());

    Map<String, List<CodeLibraryEntity>> provinceCollect = codeLibraryEntityList.stream().filter(e -> StringUtils.isNumeric(e.getTitle())).collect(Collectors.groupingBy(e -> e.getTitle().substring(0, 2)));

    List<List<CodeLibraryEntity>> result = provinceCollect.entrySet().stream().map(provinceList -> {

        //处理第一层
        String firstLevel = provinceList.getValue().stream().filter(e -> e.getCode().length() == 2).findFirst().get().getValue();
        //排除自身数据的干扰
        provinceList.getValue().stream().filter(e -> !e.getValue().equals(firstLevel)).map(item -> {

            item.setValue(item.getValue().replace(firstLevel, ""));
            return item;
        }).collect(Collectors.toList());

        //处理第二层
        log.info("provinceList={}", provinceList);
        //第二层数据可能存在多个
        List<CodeLibraryEntity> secondLevelList = provinceList.getValue().stream().filter(e -> e.getCode().length() == 4).collect(Collectors.toList());
        for (CodeLibraryEntity each : secondLevelList) {

            String secondLevel = each.getValue();
            //排除自身数据的干扰
            provinceList.getValue().stream().filter(e -> !e.getValue().equals(secondLevel)).map(item -> {

                item.setValue(item.getValue().replace(secondLevel, ""));
                return item;
            }).collect(Collectors.toList());
        }

        return provinceList.getValue();

    }).collect(Collectors.toList());

    //保存到数据库
    result.stream().forEach(provinceInfoList -> codeLibraryRepository.saveAll(provinceInfoList));

}

Map 类型的数据遍历

Map<String,String> map = new HashMap<>();

//方式一:通过 Map.keySet 遍历 key 和 value
for(String key: map.keySet){
    //业务代码
}

//方式二:通过Map.entrySet 遍历 key 和 value
provinceCollect.entrySet().stream().map(item -> item.getValue);

//方式三:
Map<String, String> map = new HashMap<>();
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {

    Map.Entry<String, String> entry = iterator.next();
    log.info(entry.getKey() + ":" + entry.getValue());
}

//方式四:通过Map.values()遍历所有的value,但不能遍历key
for (String value : map.values()) {
    System.out.println(value);
}

判断是否是数字类型

可以使用 org.apache.commons.langs.StringUtils.isNumeric

结果:

361

province:北京 --cityName:朝阳区 ----countyName:三环以内 ----countyName:三环到四环之间 ----countyName:四环到五环之间 ----countyName:五环到六环之间 ----countyName:管庄 ----countyName:北苑 ----countyName:定福庄 --cityName:海淀区 ----countyName:三环以内 ----countyName:三环到四环之间 ----countyName:四环到五环之间 ----countyName:五环到六环之间 ----countyName:六环以外 ----countyName:上地 ----countyName:西三旗 ----countyName:清河 ----countyName:圆明园西路 ----countyName:农业大学西校区 ----countyName:西二旗 --cityName:西城区 ----countyName:内环到二环里 ----countyName:二环到三环 --cityName:东城区 ----countyName:内环到三环里 --cityName:崇文区 ----countyName:一环到二环 ----countyName:二环到三环 --cityName:宣武区 ----countyName:内环到三环里 --cityName:丰台区 ----countyName:四环到五环之间 ----countyName:二环到三环 ----countyName:三环到四环之间 ----countyName:五环到六环之间 ----countyName:六环之外 --cityName:石景山区 ----countyName:四环到五环内 ----countyName:石景山城区 ----countyName:八大处科技园区 --cityName:门头沟 ----countyName:郊区 ----countyName:城区以内 --cityName:房山区 ----countyName:郊区 ----countyName:城区以内 --cityName:通州区 ----countyName:五环到六环之间 ----countyName:六环以外(其他地区) ----countyName:六环以外(张家湾镇、台湖镇、漷县镇、宋庄镇) ----countyName:六环以外(于家务乡) --cityName:大兴区 ----countyName:四环至五环之间 ----countyName:六环以外 ----countyName:五环至六环之间 ----countyName:北京经济技术开发区 --cityName:顺义区 ----countyName:顺义区(城区内,天竺镇,马坡镇,牛栏山镇,后沙峪镇城区) ----countyName:顺义区(郊区) ----countyName:顺义区(南彩镇、李桥镇) --cityName:怀柔区 ----countyName:郊区 ----countyName:城区以内 --cityName:密云区 ----countyName:城区以外 ----countyName:城区 --cityName:昌平区 ----countyName:城区以外 ----countyName:六环以内 ----countyName:城区 --cityName:平谷区 ----countyName:城区以外 ----countyName:城区 --cityName:延庆县 ----countyName:百泉路南,京新高速北,康张路西,京银路东 ----countyName:百泉路北,京新高速南,康张路东,京银路西 province:上海 里面还包含:jsonUtils工具类,Nettool工具类
Java Ajax省市区三级联动是一种前端页面交互功能,用于在用户选择省份、城市和区县时实现动态加载相应数据的功能。 首先,需要在前端页面通过HTML代码创建三个下拉框,分别表示省份、城市和区县。然后,使用JavaScript编写前端的Ajax请求,通过发送异步请求到后端服务,获取数据。 在后端Java代码中,可以使用Spring MVC或Servlet等框架处理前端Ajax请求。首先,需要在数据库中建立相应的省市区数据表,并将数据存储在表中。然后,可以使用JDBC或MyBatis等数据库访问框架,编写相应的Java代码实现数据的查询和返回。 具体实现时,可以通过监听省份下拉框的变化事件,在事件处理函数内发送Ajax请求到后端服务,将当前选择的省份作为参数传递给后端。后端服务可以根据省份查询对应的城市数据,将城市数据返回给前端。 类似地,继续监听城市下拉框的变化事件,在事件处理函数内发送Ajax请求到后端服务,将当前选择的城市和省份作为参数传递给后端。后端服务可以根据城市和省份查询对应的区县数据,将区县数据返回给前端。 最后,根据返回的数据,在前端页面使用JavaScript动态修改区县下拉框的选项,实现三级联动效果。 总结起来,Java Ajax省市区三级联动通过前端页面的交互和后端的数据处理,实现了在用户选择省份、城市和区县时动态加载相应数据的功能。这种开发方式能够提高用户体验,同时满足实际业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值