当我们遇到需要将两个list合并成一个list实体的时候,可以使用java8的stream流来解决,以下是我的一个小demo,可供大家参考学习。
public ResultDto listBalancer(Integer pageIndex, Integer pageLimit, String userId, MidOsBalancerDto midOsBalancerDto) {
List<MidOsBalancerDto> dtoList = new ArrayList<MidOsBalancerDto>();
int code = 200;
int count = 0;
String msg = "查询成功";
try {
MidOsBalancerExample example = buildExample(midOsBalancerDto);
count = iMidOsBalancerDao.total(example);
List<MidOsBalancer> poList = new ArrayList<MidOsBalancer>();
if (pageIndex != null && pageLimit != null) {
Page page = PageBuilder.build(pageIndex, pageLimit);
poList = iMidOsBalancerDao.find(example, page);
} else {
poList = iMidOsBalancerDao.find(example);
}
if (count > 0) {
//获取该条件下的对象路由id
List<String> groupIds = poList.stream().map(MidOsBalancer::getGroupId).collect(Collectors.toList());
//循环遍历id查询对象路由信息
MidOsPathExample pathExample = new MidOsPathExample();
MidOsPathExample.Criteria criteria = pathExample.createCriteria();
criteria.andIdIn(groupIds);
List<MidOsPath> midOsPaths = iMidOsPathDao.find(pathExample);
//获取所有该条件下的LV
poList.forEach(midBalancer -> {
MidOsBalancerDto midOsBalancerDto1 = BeanCopyUtil.getDtoObject(MidOsBalancerDto.class, midBalancer, "loadCreteTime", "vipMask");
Integer vipMask = midBalancer.getVipMask();
String loadCreteTime = DateUtil.dateFormat(midBalancer.getLoadCreteTime());
midOsBalancerDto1.setLoadCreteTime(loadCreteTime);
midOsBalancerDto1.setVipMask(vipMask);
for (MidOsPath path : midOsPaths) {
if (path.getId().equals(midBalancer.getGroupId())) {
midOsBalancerDto1.setGroupName(path.getName());
midOsBalancerDto1.setGroupStatus(path.getStatus());
midOsBalancerDto1.setGroupCreate(DateUtil.dateFormat(path.getLoadCreateTime()));
}
}
dtoList.add(midOsBalancerDto1);
});
}
} catch (Exception e) {
code = 500;
msg = "查询失败";
logger.error("{}", e);
}
ResultDto result = ResultUtil.result(dtoList, code, count, msg);
return result;
}