java 无限层级 单表处理

数据库表结构

public class Pojo {   

    /**
     * id
     */
    private Integer id;

    /**
     * 上一级id
     */
    private Integer baseId;

    /**
     * 名称
     */
    private String name;

}

前端展示

    public class Vo {

        /**
         * id
         */
        private Integer id;

        /**
         * 上一级id
         */
        private Integer baseId;

        /**
         * 名称
         */
        private String name;

        private List<Vo> list;
  }

数据整理  代码纯手打  有错误自行更改

List<Pojo> pojoList = new ArrayList<>();

/*
   pojoList.add...
*/
//创建一个temp list
List<Pojo> pojoTempList = new ArrayList<>(pojoList);
//保存每一级的
Map<Integer,List<Vo>> baseIdVoListMap = new HashMap<>();

while(pojoTempList .size()>0){
    //创建一个temp list
    List<Pojo> pojoTempList1 = new ArrayList<>(pojoTempList);
    for(Pojo p : pojoTempList1){
        // 查找当前 p 是否存在 子级 数据
        long count = pojoTempList.stream().filter(t-> t.getBaseId().equals(p.getId()));
        if(count<=0){
             //数据类转换 自行查找
             Vo vo =new Vo(p); 
             //获取 子级 数据
             List<Vo> childList = baseIdVoListMap.getOrDefault(p.getId(), new ArrayList<>());
              vo.setList(childList );
              //获取 父级 数据
             List<Vo> baseList = baseIdVoListMap.getOrDefault(p.getBaseId(),new ArrayList<>());
            //添加到父级列表
            baseList.add(vo);
            //保存到map
            baseIdVoListMap.put(p.getBaseId(),baseList);
            //删除本条数据
            pojoTempList.removeIf(t->t.getId().equals(p.getId()));
            //删除子级数据
            baseIdVoListMap.remove(p.getId());
        }
    }
}

//最终需要的数据
List<Vo> retList = baseIdVoListMap.values();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值