List集合对象处理父子级关系的数据

需求是查询一张分类表,里面的结构是有一个父级id,然后展示的JSON格式是那种树状的层级关系,类似于:

{

       "父级id":id

        "父级名称":name

       “父级编码”:code

       “子类数组集合对象”:[

           {子类对象1},{子类对象2},......       

       ] 

}

 

我是通过selectAll把全部数据先查询出来,然后通过程序递归来处理,最后把数据组合返回一个List<Map<String, Object>>对象,代码如下:

   /**
     * 物资分类
     * @param wzlbbm
     * @return
     */
    @Override
    public List<Map<String, Object>> wzfl(String wzlbbm) {
        /**
         * 1.先把全部物资分类全部数据查询出来
         */
        List<Wzfl> wzflsList = wzflMapper.selectList(null);

        /**
         * 2.新建返回对象
         */
        List<Map<String, Object>> wzflList = new ArrayList<Map<String, Object>>();

        /**
         * 3.循环处理全部数据,转为父子级对象
         */
        for(Wzfl vo: wzflsList){
            Map<String,Object> map = new HashMap<String,Object>(8);
            if("0".equals(vo.getFjwzflid())){
                map.put("children", getChildren(wzflsList,vo.getWzflid()));
                map.put("wzflid", vo.getWzflid());
                map.put("wzflmc", vo.getWzflmc());
                map.put("fjwzflid", vo.getFjwzflid());
                map.put("pyjm", vo.getPyjm());
                wzflList.add(map);
            }
        }

        /**
         * 4.返回树状父子级分类结果
         */
        return wzflList;
    }


       
 /**
     * 递归处理物资分类父子级关系数据
     * @param data 物资分类集合
     * @param wzflid 物资分类父类ID
     * @return
     *
     * 业务逻辑说明:
     * wzfl()方法里的调用方法
     * 1.递归循环遍历,当父级ID和物资分类ID一致,则是父子级关系
     * 2.把子类对象放入到父级的children集合里
     */
    public List<Map<String, Object>> getChildren(List<Wzfl> data,String wzflid){
        /**
         * 1.对数据校验处理
         */
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        if(data==null||data.size()==0||wzflid==null){
            return list;
        }

        /**
         * 2.遍历匹配父子级关系数据
         */
        for(Wzfl vo:data ){
            Map<String,Object> map = new HashMap<String,Object>(8);
            if(wzflid.toString().equals(vo.getFjwzflid())){
                map.put("children", getChildren(data,vo.getWzflid()));
                map.put("wzflid", vo.getWzflid());
                map.put("wzflmc", vo.getWzflmc());
                map.put("fjwzflid", vo.getFjwzflid());
                map.put("pyjm", vo.getPyjm());
                list.add(map);
            }

        }

        /**
         * 3.返回处理后的结果对象
         */
        return list;
    }

JSON数据结果返回如下:

{
    "code": 0,
    "msg": "成功",
    "data": [
        {
            "wzflmc": "一次性卫生材料",
            "pyjm": null,
            "wzflid": "1",
            "fjwzflid": "0",
            "children": [
                {
                    "wzflid": "3",
                    "children": [
                        {
                            "wzflid": "4",
                            "children": [],
                            "wzflmc": "儿童一次性口罩",
                            "pyjm": null,
                            "fjwzflid": "3"
                        },
                        {
                            "wzflid": "5",
                            "children": [],
                            "wzflmc": "成人一次性口罩",
                            "pyjm": null,
                            "fjwzflid": "3"
                        }
                    ],
                    "wzflmc": "一次性医用口罩",
                    "pyjm": null,
                    "fjwzflid": "1"
                }
            ]
        },
        {
            "wzflmc": "办公用品",
            "pyjm": null,
            "wzflid": "2",
            "fjwzflid": "0",
            "children": []
        }
    ]
}

参考文章来自于:https://blog.csdn.net/qq_39177224/article/details/84099382

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 要判断List对象集合中某个字段是否存在空数据,可以使用stream流中的filter方法来过滤出符合条件的元素。首先,创建一个验证对象,设置需要验证的字段为空,然后使用filter方法对List集合进行过滤,判断是否存在字段为空的元素。如果存在空数据,则返回true,否则返回false。以下是一个示例代码: ```java List<People> peopleList = new ArrayList<>(); // 添加对象集合中 // 验证的对象 People verifyPeople = new People(); verifyPeople.setName(null); // 设置需要验证的字段为空 boolean hasEmptyData = peopleList.stream() .filter(item -> item.getName() == null) // 过滤出字段为空的元素 .findAny() .isPresent(); if (hasEmptyData) { System.out.println("存在字段为空的数据"); } else { System.out.println("不存在字段为空的数据"); } ``` 在上述代码中,我们使用了stream流的filter方法来过滤出字段为空的元素,然后使用findAny方法找到任意一个符合条件的元素,最后使用isPresent方法判断是否存在符合条件的元素。如果存在字段为空的数据,则输出"存在字段为空的数据",否则输出"不存在字段为空的数据"。 #### 引用[.reference_title] - *1* [List集合中的对象判断某个字段是否重复-去重](https://blog.csdn.net/weixin_42310713/article/details/120200552)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java集合列表,对集合中某个字段判断是否存在](https://blog.csdn.net/qq_45502336/article/details/126299524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值