使用场景:

开发中遇到一个需要对导入的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集合根据相同属性合并同类项相关推荐

  1. java jdk8 使用stream实现两个list集合合并成一个list集合(对象属性的合并)

    java使用stream实现list中对象属性的合并: 根据两个List中的某个相同字段合并成一条List,包含两个List中的字段 目录 一.前言 二.示例 示例1:java8 合并两个 list& ...

  2. excel公式:用countif、match、index合并同类项

    1.合并同类项: =INDEX(A2:A8,MATCH(0,COUNTIF(B$1:B1,A2:A8),0))&""  Ctr+Shift+Enter =INDEX(A$2 ...

  3. Shader的合并同类项

    在数学中我们学习过:把多项式中的同类项合并成一项叫做合并同类项.同理,提取Shader的相似部分,把多个Shader合并成一个就叫做Shader的合并,也叫合并Shader,偶尔也会引用数学的名词来称 ...

  4. junit集成Hamcrest测试集合中某个属性是否包含特定值

    junit已经集成Hamcrest但是还是需要引用hamcrest-library,不然只有基本方法,高级的没有 <dependency> <groupId>junit< ...

  5. java集合多个最大值_Java 8 Stream 求集合元素每个属性的最大值

    Java 8 Stream 求集合元素每个属性的最大值,赋值给新对象 public class Mqtt { private int temperature; private int humidity ...

  6. (转)Spring如何装配各种集合类型的属性

    http://blog.csdn.net/yerenyuan_pku/article/details/52858499 在前面我们已经会注入基本类型对象和其他bean,现在我们就来学习如何注入各种集合 ...

  7. 高阶多项式合并同类项程序c语言,c语言实现两多项式相乘并排序合并同类项.doc...

    #includetypedef struct Node { int coef;//系数 int exp;//指数 struct Node *next; }PolyNode; PolyNode *Cre ...

  8. Android开发笔记(九十六)集合动画与属性动画

    集合动画AnimationSet 补间动画有四大类:透明度动画AlphaAnimation.旋转动画RotateAnimation.缩放动画ScaleAnimation.平移动画TranslateAn ...

  9. stream筛选出集合中对象属性重复值

    stream筛选出集合中对象属性重复值 字符串集合筛选 List<String> strings = Arrays.asList("a", "bb" ...

最新文章

  1. 常用的几种大数据架构剖析
  2. Servlet异常处理
  3. repeated_Ruby中带有示例的Array.repeated_combination()方法
  4. Atitit 文件存储标准化api 总结 目录 1. 操作系统,进行操作 1 1.1. FileUtils类的应用 1 1.2. 各大api 比较 2 2. Java。Io用apache的commo
  5. Sandwell模型和卫星测高反演海底地形
  6. 泛函、变分与欧拉-拉格朗日方程
  7. 自我评价中专计算机600作文,中专生毕业的自我评价(精选5篇)
  8. iphone和iPad开发的区别
  9. 空间轨迹分析与应用(前言)Computing with Spatial Trajectories
  10. M - Make Cents?
  11. IntelliJ IDEA - 自定义 TODO
  12. DailyFi - 9.20|NFT 平台 Vera 将于明日在 Polkastarter 上 IDO
  13. 第3章 事实、数据检索
  14. 计算机教学改革模式,计算机专业课程教学改革研究
  15. 【解惑】专科生在IT的发展之路
  16. MongoDB的Journal
  17. 网络加速器是干什么用的?
  18. 逻辑学辅修计算机,带你认清大学逻辑学专业的真面目
  19. 皓龙服务器系列怎么样,双核皓龙服务器导购
  20. C4D+OC渲染线框

热门文章

  1. python获取文件修改时间并比较_python获取文件创建和修改时间
  2. 区块链社区建设难:难在项目自身,也难在社区载体 |链捕手
  3. 微信红包接口 java_java调用微信现金红包接口的心得与体会总结
  4. 走进Linux 操作系统(ZT)
  5. postgresql 的 prepare 探索之一
  6. 景德镇特色的部门级别与权限
  7. springboot整合mybatis实现增删改查
  8. Android建立网络连接,利用JSON数据获取百度图片搜索结果及GSON的简单使用
  9. python微型爬虫获取美女图片(福利满满额)
  10. 微信拼手气红包C语言,微信拼手气红包算法分析