1、定义java pojo
@Data
@ApiModel(“区域编码VO”)
public class RegionCodeVO implements Serializable {
@ApiModelProperty("区域id")
private Long id;
@ApiModelProperty("行政区划代码")
private String regionCode;
@ApiModelProperty("行政区划名称")
private String regionName;
@ApiModelProperty("行政区划等级")
private Integer regionLevel;
@ApiModelProperty("上级行政区划代码")
private String parentRegionCode;
@ApiModelProperty("排序")
private Integer order;
@ApiModelProperty("下级区域列表")
private List childList;
}
2、
private List treeRegionCodeVOS(List regionCodeVOS) {
//封装为树形结构
List result = new ArrayList<>();
if (!CollectionUtils.isEmpty(regionCodeVOS)) {
RegionCodeVO root = new RegionCodeVO(); // 树的最顶级,没有任何的省市区内容
Map
// 组装
for (Map.Entry
RegionCodeVO regionCodeVO = entry.getValue();
if (“0”.equals(regionCodeVO.getParentRegionCode())) { // 省、直辖市均默认parentCode为0
if(root.getChildList() == null) {
root.setChildList(new ArrayList<>());
}
root.getChildList().add(regionCodeVO); // 设置所有的省份、直辖市
} else {
if (regionCodeVOMap.get(regionCodeVO.getParentRegionCode()).getChildList() == null) { // 获取当前对象对应的父对象下的子对象集合
regionCodeVOMap.get(regionCodeVO.getParentRegionCode()).setChildList(new ArrayList<>()); // 为空时,新创建一个子对象集合
}
regionCodeVOMap.get(regionCodeVO.getParentRegionCode()).getChildList().add(regionCodeVO); // 将当前对象添加到其父对象对应的子对象集合中
}
}
// 排序
sortRegionCode(root.getChildList());
result = root.getChildList();
}
return result;
}
3、排序
private List sortRegionCode(List regionCodeVOS){
if (CollectionUtils.isEmpty(regionCodeVOS)) {
return regionCodeVOS;
}
if (regionCodeVOS.get(0).getRegionLevel() == 1) {
sortByOrder(regionCodeVOS); // 省 - 按照order字段数字大小升序
} else {
sortByRegionName(regionCodeVOS); // 市、区 - 按照首字母升序
}
// 对每个节点的下一层节点进行排序
for (RegionCodeVO regionCodeVO : regionCodeVOS) {
sortRegionCode(regionCodeVO.getChildList());
}
return regionCodeVOS;
}
private void sortByOrder(ListregionCodeVOS) { Collections.sort(regionCodeVOS, new Comparator () { @Override public int compare(RegionCodeVO vo1, RegionCodeVO vo2) { int result = 0; Integer seq1 = vo1.getOrder(); Integer seq2 = vo2.getOrder(); if (seq1 != null && seq2 != null) { result = seq1 < seq2 ? -1 : (seq1.equals(seq2) ? 0 : 1); } else { result = vo1.getId() < vo2.getId() ? 1 : (vo1.getId().equals(vo2.getId()) ? 0 : -1); } return result; } }); } private void sortByRegionName(List list){ Comparator comparator = Collator.getInstance(ULocale.SIMPLIFIED_CHINESE); Collections.sort(list, (o1, o2) -> comparator.compare(o1.getRegionName(), o2.getRegionName())); }



