List集合根据相同属性合并同类项
使用场景:
开发中遇到一个需要对导入的Excel数据进行数据校验的需求,但是同一列的数据校验提示语可能就只是行数不同,其他都相同,由于我们的数据校验提示都是放到消息盒子里的,所以为了阅读方便,需要对同类型的校验信息合并同类项。
处理逻辑:
1.定义验证信息类
需要重写equals入hashcode方法,定义merge方法(合并的逻辑:我这里是将行数拼接)
import lombok.Data;@Data public class VerifyMessage {private String sheetName;private String columnName;private String rowNum;private Integer verifyType;@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((sheetName == null) ? 0 : sheetName.hashCode());result = prime * result + ((columnName == null) ? 0 : columnName.hashCode());result = prime * result + ((verifyType == null) ? 0 : verifyType.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;VerifyMessage other = (VerifyMessage) obj;if (sheetName == null) {if (other.sheetName != null)return false;} else if (!sheetName.equals(other.sheetName))return false;if (columnName == null) {if (other.columnName != null)return false;} else if (!columnName.equals(other.columnName))return false;if (verifyType == null) {if (other.verifyType != null)return false;} else if (!verifyType.equals(other.verifyType))return false;return true;}static VerifyMessage merge(VerifyMessage m1, VerifyMessage m2) {if (!m1.equals(m2)) {throw new IllegalArgumentException();}return new VerifyMessage(m1.sheetName, m1.columnName, m1.rowNum + "," + m2.rowNum, m1.verifyType);}@Overridepublic String toString() {return "VerifyMessage{" +"sheetName='" + sheetName + '\'' +", columnName='" + columnName + '\'' +", rowNum='" + rowNum + '\'' +", verifyType=" + verifyType +'}';}public VerifyMessage(String sheetName, String columnName, String rowNum, Integer verifyType) {this.sheetName = sheetName;this.columnName = columnName;this.rowNum = rowNum;this.verifyType = verifyType;} }
2.创建测试类
public static void main(String[] args) {List<VerifyMessage> verifyMessageList = new ArrayList<>();verifyMessageList.add(new VerifyMessage("排班及目标导入","排班时长","1",SZGS.num));verifyMessageList.add(new VerifyMessage("排班及目标导入","排班时长","3",SZGS.num));verifyMessageList.add(new VerifyMessage("排班及目标导入","排班时长","7",SZGS.num));verifyMessageList.add(new VerifyMessage("排班及目标导入","排班时长","9",SZGS.num));verifyMessageList.add(new VerifyMessage("人员数据-HR","日期","5",RQGS.num));verifyMessageList.add(new VerifyMessage("人员数据-HR","日期","14",RQGS.num));verifyMessageList.add(new VerifyMessage("人员数据-HR","日期","19",RQGS.num));Map<VerifyMessage, VerifyMessage> map = new HashMap<>();for (VerifyMessage verifyMessage : verifyMessageList) {if (map.containsKey(verifyMessage)) {map.put(verifyMessage, VerifyMessage.merge(map.get(verifyMessage), verifyMessage));} else {map.put(verifyMessage, verifyMessage);}}for (VerifyMessage verifyMessage :map.values()){System.out.println(verifyMessage);} }输出:
VerifyMessage{sheetName='人员数据-HR', columnName='日期', rowNum='5,14,19', verifyType=1}
VerifyMessage{sheetName='排班及目标导入', columnName='排班时长', rowNum='1,3,7,9', verifyType=2}总结
可以根据自己的实际需求更改合并逻辑。
List集合根据相同属性合并同类项相关推荐
- java jdk8 使用stream实现两个list集合合并成一个list集合(对象属性的合并)
java使用stream实现list中对象属性的合并: 根据两个List中的某个相同字段合并成一条List,包含两个List中的字段 目录 一.前言 二.示例 示例1:java8 合并两个 list& ...
- excel公式:用countif、match、index合并同类项
1.合并同类项: =INDEX(A2:A8,MATCH(0,COUNTIF(B$1:B1,A2:A8),0))&"" Ctr+Shift+Enter =INDEX(A$2 ...
- Shader的合并同类项
在数学中我们学习过:把多项式中的同类项合并成一项叫做合并同类项.同理,提取Shader的相似部分,把多个Shader合并成一个就叫做Shader的合并,也叫合并Shader,偶尔也会引用数学的名词来称 ...
- junit集成Hamcrest测试集合中某个属性是否包含特定值
junit已经集成Hamcrest但是还是需要引用hamcrest-library,不然只有基本方法,高级的没有 <dependency> <groupId>junit< ...
- java集合多个最大值_Java 8 Stream 求集合元素每个属性的最大值
Java 8 Stream 求集合元素每个属性的最大值,赋值给新对象 public class Mqtt { private int temperature; private int humidity ...
- (转)Spring如何装配各种集合类型的属性
http://blog.csdn.net/yerenyuan_pku/article/details/52858499 在前面我们已经会注入基本类型对象和其他bean,现在我们就来学习如何注入各种集合 ...
- 高阶多项式合并同类项程序c语言,c语言实现两多项式相乘并排序合并同类项.doc...
#includetypedef struct Node { int coef;//系数 int exp;//指数 struct Node *next; }PolyNode; PolyNode *Cre ...
- Android开发笔记(九十六)集合动画与属性动画
集合动画AnimationSet 补间动画有四大类:透明度动画AlphaAnimation.旋转动画RotateAnimation.缩放动画ScaleAnimation.平移动画TranslateAn ...
- stream筛选出集合中对象属性重复值
stream筛选出集合中对象属性重复值 字符串集合筛选 List<String> strings = Arrays.asList("a", "bb" ...
最新文章
- Namomo Test Round 1的B Hat[概率题:详解]
- 【linux高级程序设计】(第十五章)UDP网络编程应用 2
- VTK:可视化算法之PineRootConnectivity
- java访问jar中的资源问题代码
- “互联网+”解决城市交通拥堵难题
- useMemo与useCallback
- BestCoder Round #77 (div.2)解题报告
- 从入门到入土:基于C语言采用SOCKET套接字实现TCP公开扫描程序Web服务器扫描程序|代码展示
- Oracle location,oracle秘境探索之11g tablespace prellocation
- Robot Framework操作
- python 判断字符串是否为空
- 2022年12月最新微博新版批量删除微博博文代码_删除清空微博博文的微博批量删除代码与方法
- 手机浏览器类型ua php,通过userAgent判断手机浏览器类型
- 使用AT89C51芯片实现生日快乐歌
- Qt 小键盘功能实现
- 统计学习导论 - 基于R的应用 学习笔记1
- Linux进程描述符task_struct结构体
- 百度云盘试用时间本地CE修改
- sublime 集成 markdown 插件【小明同学】
- 计算机网络笔记Part1 概述
热门文章
- 两款在线同义词典,告别乏味表达!
- 工作不需要面试需要的红黑树知识
- 苏州电脑数据恢复中心怎么样
- 【调剂】东南大学2022年软件学院(苏州)硕士生调剂信息
- 足不出户怎么在家赚钱,暑假在家别闲着,给自己赚点生活费吧
- Nmap手册(转自http://www.nmap.com.cn/doc/manual.shtm)
- 现有一字符串aaa[bbb[ccc,ddd[eee,fff]],ggg[hhh,iii]]要求,取出所有类似 xxx[xxx,xxx] 结构的字符串
- 学习笔记(1):深蓝解读区块链技术-开题
- microsoft vbscript编译器错误怎么解决_Win10电脑遇到DistributedCOM错误10016怎么解决?「系统天地」...
- ENC28J60+STM32F103在STM32CubeIDE上移植lwIP2.1.2