使用场景:

开发中遇到一个需要对导入的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. Namomo Test Round 1的B Hat[概率题:详解]
  2. 【linux高级程序设计】(第十五章)UDP网络编程应用 2
  3. VTK:可视化算法之PineRootConnectivity
  4. java访问jar中的资源问题代码
  5. “互联网+”解决城市交通拥堵难题
  6. useMemo与useCallback
  7. BestCoder Round #77 (div.2)解题报告
  8. 从入门到入土:基于C语言采用SOCKET套接字实现TCP公开扫描程序Web服务器扫描程序|代码展示
  9. Oracle location,oracle秘境探索之11g tablespace prellocation
  10. Robot Framework操作
  11. python 判断字符串是否为空
  12. 2022年12月最新微博新版批量删除微博博文代码_删除清空微博博文的微博批量删除代码与方法
  13. 手机浏览器类型ua php,通过userAgent判断手机浏览器类型
  14. 使用AT89C51芯片实现生日快乐歌
  15. Qt 小键盘功能实现
  16. 统计学习导论 - 基于R的应用 学习笔记1
  17. Linux进程描述符task_struct结构体
  18. 百度云盘试用时间本地CE修改
  19. sublime 集成 markdown 插件【小明同学】
  20. 计算机网络笔记Part1 概述

热门文章

  1. 两款在线同义词典,告别乏味表达!
  2. 工作不需要面试需要的红黑树知识
  3. 苏州电脑数据恢复中心怎么样
  4. 【调剂】东南大学2022年软件学院(苏州)硕士生调剂信息
  5. 足不出户怎么在家赚钱,暑假在家别闲着,给自己赚点生活费吧
  6. Nmap手册(转自http://www.nmap.com.cn/doc/manual.shtm)
  7. 现有一字符串aaa[bbb[ccc,ddd[eee,fff]],ggg[hhh,iii]]要求,取出所有类似 xxx[xxx,xxx] 结构的字符串
  8. 学习笔记(1):深蓝解读区块链技术-开题
  9. microsoft vbscript编译器错误怎么解决_Win10电脑遇到DistributedCOM错误10016怎么解决?「系统天地」...
  10. ENC28J60+STM32F103在STM32CubeIDE上移植lwIP2.1.2