Java8中stream的map和group by的使用

实际使用中,经常遇到一个for循环里面,会有去查询数据库,为了防止这个动作,可以提前将要查询的数据查询出来,然后通过stream中的map.get(key)的方式去匹配对应

代码如下,可做参考:

// 第一种是map<String,Object>
List<WorkstationGroup> workstationGroupList = workstationGroupMapper.selectList(new LambdaQueryWrapper<>()); Map<String, WorkstationGroup> groupMap =
workstationGroupList.stream().collect(Collectors.toMap(WorkstationGroup::getGroupId,WorkstationGroup -> WorkstationGroup));
for (WorkstationCenterSuperior vo : centerSuperiors) {
  WorkstationGroup workstationGroup = groupMap.get(vo.getGroupId());
  if (ObjectUtils.isNotEmpty(workstationGroup)){
  vo.setGroupName(workstationGroup.getGroupName());
  }
}
// 第二种是map<String,List<Object>>
List<WorkstationCenter> workstationCenters = centerMapper.selectList(new LambdaQueryWrapper<>());  // 查询出数据库的数据
Map<String, List<WorkstationCenter>> listMap =
workstationCenters.stream().collect(Collectors.groupingBy(WorkstationCenter::getGroupId,
Collectors.mapping(WorkstationCenter -> WorkstationCenter, Collectors.toList()))); //通过stream转换为map的形式
groupList = groupList.stream().peek(e ->{   // 利用peek进行遍历处理
// 工作中心
List<WorkstationCenter> workstationCenter = listMap.get(e.getGroupId());
List<WorkstationCenterVo> workstationCenterVos = BeanUtil.copyToList(workstationCenter, WorkstationCenterVo.class);
if (CollUtil.isNotEmpty(workstationCenterVos)){
e.setCenterVoList(workstationCenterVos);
}
}).collect(Collectors.toList());

 

以下为源码:

     List<String> groupIdList = centerQuery.getGroupIdList();
        if (CollUtil.isEmpty(groupIdList)){
            return BaseResponse.fail("分组id不能为空");
        }
        // 查询工作站
        LambdaQueryWrapper<WorkstationGroup> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(WorkstationGroup::getGroupId,groupIdList);
        List<WorkstationGroup> workstationGroups = workstationGroupMapper.selectList(queryWrapper);
        List<WorkstationGroupCenterVo> groupList = BeanUtil.copyToList(workstationGroups, WorkstationGroupCenterVo.class);
        if (CollUtil.isEmpty(groupList)){
            return BaseResponse.fail("数据为空");
        }
        // 查询工作站下工作中心
        LambdaQueryWrapper<WorkstationCenter> wrapper = new LambdaQueryWrapper<>();
        wrapper.in(WorkstationCenter::getGroupId,groupIdList);
        List<WorkstationCenter> workstationCenters = centerMapper.selectList(wrapper);
        List<WorkstationGroupCenterVo> CenterVos = BeanUtil.copyToList(workstationCenters, WorkstationGroupCenterVo.class);
        if (CollUtil.isNotEmpty(CenterVos)){
            List<String> centerIds = workstationCenters.stream().map(WorkstationCenter::getCenterId).collect(Collectors.toList());
            // 查询上级工作中心
            LambdaQueryWrapper<WorkstationCenterSuperior> lambdaQueryWrapper = new LambdaQueryWrapper<>();
            lambdaQueryWrapper.in(WorkstationCenterSuperior::getCenterId,centerIds);
            List<WorkstationCenterSuperior> workstationCenterSuperiors = centerSuperiorMapper.selectList(lambdaQueryWrapper);
            //
            Map<String, List<WorkstationCenterSuperior>> superiorMap =
                    workstationCenterSuperiors.stream().collect(Collectors.groupingBy(WorkstationCenterSuperior::getCenterId,
                            Collectors.mapping(WorkstationCenterSuperior -> WorkstationCenterSuperior, Collectors.toList())));
            //
            List<WorkstationGroup> workstationGroupList = workstationGroupMapper.selectList(new LambdaQueryWrapper<>());
            Map<String, WorkstationGroup> groupMap = workstationGroupList.stream().collect(Collectors.toMap(WorkstationGroup::getGroupId, WorkstationGroup -> WorkstationGroup));
            List<WorkstationCenter> workstationCenterList = centerMapper.selectList(new LambdaQueryWrapper<>());
            Map<String, WorkstationCenter> centerMap = workstationCenterList.stream().collect(Collectors.toMap(WorkstationCenter::getCenterId, WorkstationCenter -> WorkstationCenter));
            //
            Map<String, List<WorkstationCenter>> listMap =
                    workstationCenters.stream().collect(Collectors.groupingBy(WorkstationCenter::getGroupId,
                            Collectors.mapping(WorkstationCenter -> WorkstationCenter, Collectors.toList())));
            // 匹配
            groupList = groupList.stream().peek(e ->{
                // 工作中心
                List<WorkstationCenter> workstationCenter = listMap.get(e.getGroupId());
                List<WorkstationCenterVo> workstationCenterVos = BeanUtil.copyToList(workstationCenter, WorkstationCenterVo.class);
                if (CollUtil.isNotEmpty(workstationCenterVos)){
                    //工作中心的父级
                    workstationCenterVos = workstationCenterVos.stream().peek(j->{
                        List<WorkstationCenterSuperior> centerSuperiors = superiorMap.get(j.getCenterId());
                        if (CollUtil.isNotEmpty(centerSuperiors)){
                            List<WorkstationCenterSuperiorVo> workstationCenterVoList = new ArrayList<>();
                            for (WorkstationCenterSuperior vo : centerSuperiors) {
                                WorkstationCenter center = centerMap.get(vo.getParentCenterId());
                                if (ObjectUtils.isNotEmpty(center)){
                                    WorkstationCenterSuperiorVo workstationCenterSuperiorVo = BeanUtil.copyProperties(center, WorkstationCenterSuperiorVo.class);
                                    //查询分组名称
                                    WorkstationGroup workstationGroup = groupMap.get(center.getGroupId());
                                    if (ObjectUtils.isNotEmpty(workstationGroup)){
                                        workstationCenterSuperiorVo.setGroupName(workstationGroup.getGroupName());
                                    }
                                    workstationCenterVoList.add(workstationCenterSuperiorVo);
                                }
                            }
                            j.setCenterSuperiorVos(workstationCenterVoList);
                        }
                    }).collect(Collectors.toList());
                    e.setCenterVoList(workstationCenterVos);
                }
            }).collect(Collectors.toList());
        }
        // 查询工作站下的调整
        return BaseResponse.ok(groupList);

 

以上内容,纯属个人工作笔记,作为记录,防止后面忘记,随时查看使用!

 

posted @ 2024-07-11 13:52  多多指教~  阅读(4)  评论(0编辑  收藏  举报