项目在开发大批量导入功能的时候,除了要要将导入的每一行和数据库比对,校验数据是否已经存在,还要判断自身导入的EXCEL数据里的重复数据呢。
List里对象属性特别多,而且可能有变化,如何快速的过滤数据…
jdk 1.8以后对集合操作提供了流对象的便捷操作,可以实现以上需求,废话不多说,程序猿还是直接看代码直观一些!!!!
第一步、利用lombokjar包里的EqualsAndHashCode注解,用于判断对象的唯一性,默认不做其他配置会使用所有参数,如果要剔除个别的属性,需要设置exclude,这个根据自己项目需求做配置即可
package xxxxxxxxxx;
import xxxxxxxx;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.poi.xssf.usermodel.XSSFRow;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**导入实体类
* @author xxx
*/
@Data
@EqualsAndHashCode(exclude = {"xu","description"})
public class TestPlanAddImportVo {
private String supplierCode;
private String xu;
private String legalCode;
private String testPlanTypeName;
private Long testPlanType;
private String productLineCode;
private String partsSourceTypeName;
private Long partsSourceType;
private String procurementPlanTypeName;
private String partsCategoryCode;
private String materialCode;
private String branchOrganizationCode;
private String eleTestModeName;
private String surTestModeName;
private Long eleTestMode;
private Long surTestMode;
private String description;
public TestPlanAddImportVo(){}
}
第二步、
List<TestPlanAddImportVo> addImportVoList = 省略poi获取excel的代码.......;
Map<TestPlanAddImportVo, List<TestPlanAddImportVo>> collect = addImportVoList.stream().collect(Collectors.groupingBy(Function.identity()));
for(Map.Entry<TestPlanAddImportVo, List<TestPlanAddImportVo>> entry : collect.entrySet()){
if(entry.getValue().size()>1){
System,out.printLin(entry.getValue().get(0).getXu()"+"和序"+"entry.getValue().get(1).getXu()+"数据重复");
}
}
注意:Collectors.groupingBy(Function.identity())会根据自身对象做唯一key分组,分组后的Value是List集合,正常value的长度应该是1,如果大于1,说明就肯定存在重复项!!!!!!!!!!!