StringUtils.isNumeric判断是否是数字字符串
字典服务里面的省市区数据需要修改,例如 广东省佛山市顺德区 --> 顺德区。在修改的过程中学到了 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
结果: