栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

List集合封装成树形结构

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

List集合封装成树形结构

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 regionCodeVOMap = regionCodeVOS.stream().collect(Collectors.toMap(RegionCodeVO::getRegionCode, Function.identity()));
// 组装
for (Map.Entry entry : regionCodeVOMap.entrySet()) {
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(List regionCodeVOS) {
    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()));
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号