重写hashCodeequals,List对象去重

重写hashCodeequals,List对象去重,第1张

重写hashCode/equals,List对象去重

随笔记录:通过重写hashCode/equals,为List中去除认为是重复的对象。

实体 TestListEntity
import lombok.Data;

@Data
public class TestListEntity {

    private Integer id;
    private String name;
    private String sex;
    private String idCard;

    public TestListEntity(Integer id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public TestListEntity(Integer id, String name, String sex, String idCard) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.idCard = idCard;
    }

    public TestListEntity() {
    }

    @Override
    public int hashCode() {
        String idCardHashCode = getIdCard();
        return idCardHashCode == null ? 0 : idCardHashCode.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        TestListEntity list = (TestListEntity) obj;
        if (null == idCard) {
            if (list.getIdCard() != null) {
                return false;
            }
        } else if (!idCard.equals(list.idCard)) {
            return false;
        }
        return true;
    }
}
测试类 TestList
import java.util.ArrayList;
import java.util.linkedHashSet;
import java.util.List;
import java.util.stream.Collectors;

public class TestList {

    public static void main(String[] args) {
        testList();
    }

    public static void testList() {
        TestListEntity testList = new TestListEntity(1, "张三", "男", "123");
        TestListEntity testList1 = new TestListEntity(2, "张三", "男", "123");
        TestListEntity testList2 = new TestListEntity(3, "李四", "女", "124");
        TestListEntity testList3 = new TestListEntity(4, "王五", "男", "125");
        TestListEntity testList4 = new TestListEntity(5, "麻子", "女");
        TestListEntity testList5 = new TestListEntity(6, "何二", "女");
        TestListEntity testList6 = new TestListEntity();

        List testLists = new ArrayList() { {
                add(testList);
                add(testList1);
                add(testList2);
                add(testList3);
                add(testList4);
                add(testList5);
                add(testList6);
            }
        };
        System.out.println("原集合:" + testLists);
        // 过滤, 去掉idCard为空的
        List testListEntities = extracted_3(testLists);
        
        // set去重
        extracted_1(testListEntities);
        // collect.distinct()去重
        extracted_2(testListEntities);
    }

    
    private static void extracted_1(List testLists) {
        linkedHashSet linkedHashSet = new linkedHashSet(testLists);
        System.out.println("set集合:" + linkedHashSet);
    }

    
    private static void extracted_2(List testLists) {
        List collect = testLists.stream().distinct().collect(Collectors.toList());
        System.out.println("collect.distinct()集合:" + collect);
    }

    
    private static List extracted_3(List testLists) {
        List collect = testLists.stream().filter(testListEntity -> null != testListEntity.getIdCard()).collect(Collectors.toList());
        System.out.println("collect.filter()集合:" + collect);
        return collect;
    }
}
结果
原集合:[TestListEntity(id=1, name=张三, sex=男, idCard=123), TestListEntity(id=2, name=张三, sex=男, idCard=123), TestListEntity(id=3, name=李四, sex=女, idCard=124), TestListEntity(id=4, name=王五, sex=男, idCard=125), TestListEntity(id=5, name=麻子, sex=女, idCard=null), TestListEntity(id=6, name=何二, sex=女, idCard=null), TestListEntity(id=null, name=null, sex=null, idCard=null)]
collect.filter()集合:[TestListEntity(id=1, name=张三, sex=男, idCard=123), TestListEntity(id=2, name=张三, sex=男, idCard=123), TestListEntity(id=3, name=李四, sex=女, idCard=124), TestListEntity(id=4, name=王五, sex=男, idCard=125)]
set集合:[TestListEntity(id=1, name=张三, sex=男, idCard=123), TestListEntity(id=3, name=李四, sex=女, idCard=124), TestListEntity(id=4, name=王五, sex=男, idCard=125)]
collect.distinct()集合:[TestListEntity(id=1, name=张三, sex=男, idCard=123), TestListEntity(id=3, name=李四, sex=女, idCard=124), TestListEntity(id=4, name=王五, sex=男, idCard=125)]

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5685683.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存