今天在公司接到的一个任务是,根据同事的有个接口去进行一个修改维护,因为现在需求有了一点点的改动。于是我就开始行动了,于是就有了下面的故事,故事我将会分成需求、解决方法与及总结来进行讲解,如有讲的不全面和不对的地方,请大家及时在评论区进行评论修正,让我们一起成长!
需求
进行查询排序的数据时一个树状结构的,而我需要进行数据的筛选
解决方案
用了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,对于以上解决方法和代码,如果大家有其他更好的办法可以在评论下方进行交流。