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

2万+

被折叠的 条评论
为什么被折叠?



