jdk1.8如何找到List集合中重复对象

项目在开发大批量导入功能的时候,除了要要将导入的每一行和数据库比对,校验数据是否已经存在,还要判断自身导入的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,说明就肯定存在重复项!!!!!!!!!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值