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 @   多多指教~  阅读(1574)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示