两个List合并,List集合中的对象根据某个相同的属性,合并另外属性

当在不同数据库中,无法使用SQL联合查询时,通过遍历两个List对象集合,依据相同ID合并属性。首先将一个对象List放入Map<id, object1>,接着遍历另一个List,比较ID,匹配则创建新对象newObject。在实际操作中,从微服务接口获取的List数据需转化为JSON字符串,再转回对象以避免遍历错误。解决方案是利用fast-json进行转换。" 52385775,1403751,Java Integer 源码解析:位操作函数,"['Java', '位运算', '源码解析', '算法']

场景描述:

因为是在不同的数据库里,所以不能使用sql联合查询,所以只能采用List封装数据和另一个List封装数据拼接成一个结果集。

方法:

根据共同的字段id,将一个对象List遍历, 放到map集合<id,object1>。然后遍历另外一个对象List,比较id, id相等,取出object1的值,和object2的值,放到新的对象newObject。

R<List<UserVO>> r = adminClient.querySysUserListByReqVo(reqVo);
        List<UserVO> userVOList = r.getData();
        if(CollectionUtils.isEmpty(userVOList)){
            return respDtoIPage;
        }

        //将userVo对象根据对应的userId放到map
        Map<Long,UserVO> userVOMap = new HashMap<>();
        // 将list中的数据转成json字符串
        String jsonObject= JSON.toJSONString(userVOList);
        //将json转成需要的对象
        userVOList = JSONObject.parseArray(jsonObject, UserVO.class);
        for (UserVO userVO : userVOList) {
            userVOMap.put(userVO.getUserId().longValue(),userVO);
            userIds.add(userVO.getUserId().longValue());
        }
       //查询用户信息
        LambdaQueryWrapper<SysCostCenterUser> useLambda = new QueryWrapper<SysCostCenterUser>().lambda();
        useLambda.in(SysCostCenterUser::getSysUserId, userIds);
   
        if (null != reqVo.getEmployeeType()) {
            useLambda.eq(SysCostCenterUser::getEmployeeType, reqVo.getEmployeeType());
        }

       IPage<SysCostCenterUser> page = this.page(BaseService.getPage(map), useLambda);
        List<SysUserGetByIdRespDto> respDtos = new ArrayList<>();
        for (SysCostCenterUser user : page.getRecords()) {
            SysUserGetByIdRespDto dto = new SysUserGetByIdRespDto();
            Long userId = user.getSysUserId();
            UserVO userVO = userVOMap.get(userId);
            BeanUtil.copyProperties(userVO, dto);
            dto.setEmployeeType(user.getEmployeeType());
            dto.setEnableDelete(enableDelete);
            respDtos.add(dto);
        }

说明:
R<List> r = adminClient.querySysUserListByReqVo(reqVo); 是调用其他微服务接口获取的封装对象,返回的格式都是封装好了的json格式,getData()得到其中的data数据,再用list去接收它。用postman去测试接口,能得到相应的数据,但是如果我遍历该集合,则会出现以下错误:
在这里插入图片描述
解决思路:从list中取出来的数据需要进行转化成json格式字符串,然后再将该json格式字符串转换成对象,这样就不会再出现报错情况,能成功遍历该list列表。
使用fast-json对其进行转换:

 // 将list中的数据转成json字符串
        String jsonObject= JSON.toJSONString(userVOList);
        //将json转成需要的对象
        userVOList = JSONObject.parseArray(jsonObject, UserVO.class);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值