JavaStream集合运算(交集、差集、并集)、多条件过滤集合方法业务实现单按钮操作[添。。。

更新时间:2023-06-23 07:37:26 阅读: 评论:0

JavaStream集合运算(交集、差集、并集)、多条件过滤集合⽅法业务实现单
按钮操作[添。。。
使⽤场景
我们在实际实现功能的开发过程之中,出现在⼀个前端页⾯的按钮上实现,在⼀个接⼝之中对数据 进⾏编辑、新增、删除 等相关操作。
此时的功能页⾯操作⼀个操作【确认】按钮,实际在后端的实现过程包含以下操作内容:
1. 在课程设置分数等级后,⼜增加⼀个⼀个等级制 【新增操作】
2. 在已经设置权重可能在前端移除 【删除操作】
3. 更改改了⾥⾯某些属性值如 等级名称、等级最⼩起始值 【更新操作】
于是需要在⼀个后端操作接⼝之中,实现对数据同时进⾏三种操作【 新增、更新、删除 】
代码实现逻辑及内容
海啸 英文获得前端回传数据到后端(包含 新增、 编辑、删除记录[已不在回传数据之中])
通过参数查询数据库之中,原来包含所有 有效权重记录
通过集合运算【新增、编辑、删除记录】
- clientList — dbList 差集 新增记录【前端回传有,数据库之中没有】
- clientList — dbList 交集 更新记录【两者都有的公共部分】
-
dbList — clientList 差集 删除记录【数据库有但是前端没有的】
注意事项:在实际业务之中⽐较计算 可能涉及多个字段组合⽐较。
// 前端回传等级规则List --- dbGradeScoreRuleList  差集属于新增内容remain的用法
// 注释重要说明: 为了区分是否是新增记录⽤max+@##@+minx+@##@+grade等级组合判断是否相等
List<GradeRuleVO> addGradeScoreRuleList = clientGradeScoreRuleList.stream()
.filter(gradeRule ->!dbGradeScoreRuleList.stream().map(dbGradeRule -> Max()+"@##@"+ Min()+"@## @"+ Grade())
.List()).Max()+"@##@"+ Min()+"@##@"+ Grade())) .List());
if(addGradeScoreRuleList.size()>0){
List<GradeRuleDTO> addGradeRuleList =new ArrayList<>();
pretend的用法for(GradeRuleVO gradeRuleVO : addGradeScoreRuleList){
GradeRuleDTO gradeRuleDTO =new GradeRuleDTO();
gradeRuleDTO.tClazzId(clazzId);
gradeRuleDTO.tCourId(courId);
gradeRuleDTO.tCreateBy(operateUrId);
gradeRuleDTO.tCreateTime(operateTime);
gradeRuleDTO.tUpdateBy(operateUrId);
gradeRuleDTO.tUpdateTime(operateTime);
addGradeRuleList.add(gradeRuleDTO);
}
clazzCourWeightExtendMapper.addBatchCourGradeScoreRuleList(addGradeRuleList);
exact
}
//2.2、更新班级课程等级评分规则
// 前端回传等级规则List --- dbGradeScoreRuleList  交集属于更新内容
List<GradeRuleVO> updateGradeScoreRuleList = clientGradeScoreRuleList.stream()
.filter(gradeRule -> dbGradeScoreRuleList.stream().map(GradeRuleVO::getId)
.List()).Id()))
.List());
if(updateGradeScoreRuleList.size()>0){
List<GradeRuleDTO> updateGradeRuleList =new ArrayList<>();
for(GradeRuleVO gradeRuleVO : updateGradeScoreRuleList){
mops
GradeRuleDTO gradeRuleDTO =new GradeRuleDTO();
gradeRuleDTO.tUpdateBy(operateUrId);
gradeRuleDTO.tUpdateTime(operateTime);
updateGradeRuleList.add(gradeRuleDTO);哥伦比亚大学排名
}
clazzCourWeightExtendMapper.updateBatchCourGradeScoreRuleList(updateGradeRuleList);
}
//2.3、删除前端去掉的评分规则
// dbGradeScoreRuleList---前端回传等级规则List  差集属于删除内容
烘托>党的奉献精神List<GradeRuleVO> deleteGradeScoreRuleList = dbGradeScoreRuleList.stream()
.
filter(gradeRule ->!clientGradeScoreRuleList.stream()
.map(clientGradeRule -> Max()+"@##@"+ Min()+"@##@"+ Grade())
惊喜的英语单词.List()).Max()+"@##@"+ Min()+"@##@"+ Grade())) .List());
if(deleteGradeScoreRuleList.size()>0){
List<Long> deleteIdList = deleteGradeScoreRuleList.stream().map(GradeRuleVO::getId).List());
Map<String, Object> removeParams =new HashMap<>(8);
removeParams.put("operateTime", operateTime);
removeParams.put("operateUrId", operateUrId);
removeParams.put("gradeRuleIdList", deleteIdList);
}
List Stream多条件过滤
⽬前⽹上⼤部分⽂章都是如何实现单条件实现,⼀般是通过单条件过滤某个Bean或者Map之中的属性值如:
List<Ur> urList = list.stream().filter(u-&Gender().equals("1")).List());
实际情况可能有多条件过滤(如果性别和出⽣籍贯等):
List<Ur> urList = list.stream().filter(s-&Gender().equals("1")
&&City().equals("北京市")).List());
甚⾄更有甚者,我们业务之中需要⽤到分类+某⼀类别的主键id于是有如下情况:// 交集
List<Ur> urList = list.stream()
.filter(ur1 -> list2.stream().map(ur2 -> City()+"&"+ Name())
again是什么意思译
.List()).City()+"&"+ Name()))
//.filter(ur1 -> list2.stream().map(Ur::getName)
//.List()).Name()))
.List());
⽐如我的实际业务之中就需要通过 最⼤值+最⼩值+等级以前进⾏区分
参考⽂章

本文发布于:2023-06-23 07:37:26,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/154611.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实现   操作   新增   删除   记录
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图