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" ...
最新文章
- 常用的几种大数据架构剖析
- Servlet异常处理
- repeated_Ruby中带有示例的Array.repeated_combination()方法
- Atitit 文件存储标准化api 总结 目录 1. 操作系统,进行操作	1 1.1. FileUtils类的应用	1 1.2. 各大api 比较	2 2. Java。Io用apache的commo
- Sandwell模型和卫星测高反演海底地形
- 泛函、变分与欧拉-拉格朗日方程
- 自我评价中专计算机600作文,中专生毕业的自我评价(精选5篇)
- iphone和iPad开发的区别
- 空间轨迹分析与应用(前言)Computing with Spatial Trajectories
- M - Make Cents?
- IntelliJ IDEA - 自定义 TODO
- DailyFi - 9.20|NFT 平台 Vera 将于明日在 Polkastarter 上 IDO
- 第3章 事实、数据检索
- 计算机教学改革模式,计算机专业课程教学改革研究
- 【解惑】专科生在IT的发展之路
- MongoDB的Journal
- 网络加速器是干什么用的?
- 逻辑学辅修计算机,带你认清大学逻辑学专业的真面目
- 皓龙服务器系列怎么样,双核皓龙服务器导购
- C4D+OC渲染线框
热门文章
- python获取文件修改时间并比较_python获取文件创建和修改时间
- 区块链社区建设难:难在项目自身,也难在社区载体 |链捕手
- 微信红包接口 java_java调用微信现金红包接口的心得与体会总结
- 走进Linux 操作系统(ZT)
- postgresql 的 prepare 探索之一
- 景德镇特色的部门级别与权限
- springboot整合mybatis实现增删改查
- Android建立网络连接,利用JSON数据获取百度图片搜索结果及GSON的简单使用
- python微型爬虫获取美女图片(福利满满额)
- 微信拼手气红包C语言,微信拼手气红包算法分析