stream流进行多条件查询,亲自验证过的坑,请进来

今天在公司接到的一个任务是,根据同事的有个接口去进行一个修改维护,因为现在需求有了一点点的改动。于是我就开始行动了,于是就有了下面的故事,故事我将会分成需求、解决方法与及总结来进行讲解,如有讲的不全面和不对的地方,请大家及时在评论区进行评论修正,让我们一起成长!

需求

进行查询排序的数据时一个树状结构的,而我需要进行数据的筛选

解决方案

用了stream流的进行多条件查询,核心代码如下:

 if(!CollectionUtils.isEmpty(organizationTree) && organizationTree.size()!=0){
 //筛选全体在校生下的各年级
            companyOrganizationModels.addAll( organizationTree.get(0).getChildren().stream().filter(e->e.getName().equals(allStudents) )
                    .collect(Collectors.toList()).get(0).getChildren().stream().filter(e->!e.getName().equals(middleStudents) && !e.getName().equals(unused) )
                    .map(childrenDetailed->{
                CompanyOrganizationModel companyOrganizationModel = new CompanyOrganizationModel();
                companyOrganizationModel.setOrgId(childrenDetailed.getId());
                companyOrganizationModel.setOrgName(childrenDetailed.getName());
                return companyOrganizationModel;
            }).collect(Collectors.toList()));

//筛选各期委员会,这里加一个不筛选middleStudents的条件只是为了将各期委员会名称对应的名称人员都显示出来,而不是笼统的人员才加的,就是为了方便做了一个分类筛选
            companyOrganizationModels.addAll( organizationTree.get(0).getChildren().stream().filter(e->e.getName().equals(committee) || e.getName().equals(administrationDepartment)).collect(Collectors.toList()).get(0).getChildren().stream().filter(e->!e.getName().equals(middleStudents) )
                    .map(
                    childrenDetailed-> {
                        CompanyOrganizationModel companyOrganizationModel = new CompanyOrganizationModel();
                        companyOrganizationModel.setOrgId(childrenDetailed.getId());
                        companyOrganizationModel.setOrgName(childrenDetailed.getName());
                        return companyOrganizationModel;
                    }).collect(Collectors.toList()));

//筛选行政部
            companyOrganizationModels.addAll( organizationTree.get(0).getChildren().stream().filter(e-> e.getName().equals(administrationDepartment))
                    .map(
                            childrenDetailed-> {
                                CompanyOrganizationModel companyOrganizationModel = new CompanyOrganizationModel();
                                companyOrganizationModel.setOrgId(childrenDetailed.getId());
                                companyOrganizationModel.setOrgName(childrenDetailed.getName());
                                return companyOrganizationModel;
                            }).collect(Collectors.toList()));

        }

总结

1,尝试过将三个都写在一起,但是发现一个总会覆盖另一个,想要将所有的显示数据都达到自己想要的显示效果,就是我上面代码所展示的。
2,想过将重复代码抽出来,达到可复用效果,但目前发现是抽不了的。
3,对于以上解决方法和代码,如果大家有其他更好的办法可以在评论下方进行交流。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值