关于两个List集合对象去重

 实际项目开发中,很多业务场景下都会遇见集合去重。在说到两个对象去重之前,首先我们回顾下普通类型的list如何去重,这里先说两个list自带的方法,图画的不是太好,勿喷- -!

一:retainAll()

            List<String> A = new ArrayList<String>();
            A.add("A");
            A.add("B");
            A.add("C");
            A.add("D");
            
            List<String>B = new ArrayList<String>();
            B.add("C");
            B.add("D");
            B.add("E");
            B.add("F");
            List<String> C = new ArrayList<String>();
            C.addAll(A);
            C.retainAll(B);
            System.out.println(C); 
结果: [C, D]

二:removeAll()

            List<String> A = new ArrayList<String>();
            A.add("A");
            A.add("B");
            A.add("C");
            A.add("D");
            
            List<String>B = new ArrayList<String>();
            B.add("C");
            B.add("D");
            B.add("E");
            B.add("F");
            
            List<String> C = new ArrayList<String>();
            C.addAll(A);
            C.removeAll(B);
            System.out.println(C);
结果:[A, B]
上面的方法看完相信已经知道一大半了,其实要做到对象去重很简单,就是还要在你的entity里重写equals和hashCode方法,

不知道为什么的同学可以参照这篇文章,讲的还不错:点击打开链接 有时候,根据业务不同,可以把需要去重的条件加进去即可。举一个好吃的栗子,代码如下

entity:

public class User {
    
    private String name;
    private Integer age;
    private String type;
// Setters and Getters 省略get&set方法.
//方便测试,写出有参构造,默认时无参.
    public User(String name,String type,int age){
        this.name = name;
        this.type  = type;
    }
    //eclipse快捷键shift+alt+s自动生成(默认实体类的所有属性)。  下边的重写方法只是根据姓名和类型来判断去重,业务不同写法不同
    @Override
    public int hashCode() {
        String result = name+type;
        return result.hashCode();
    }
    @Override
    public boolean equals(Object obj) {
        User u = (User)obj;
        return this.getName().equals(u.getName()) && (this.getType().equals(u.getType()));
    }
}
test:
public class UserDistinctTest {
    public static void main(String[] args) {
        List<User> A = new ArrayList<User>();
        User user1 = new User("LiMing", "1");
        A.add(user1);
 
        User user2 = new User("WangHong", "2");
        A.add(user2);
 
        User user3 = new User("ZhangLiang", "3");
        A.add(user3);
 
        List<User> B = new ArrayList<User>();
        User user4 = new User("LiMing", "1");
        B.add(user4);
 
        User user5 = new User("WangHong", "2");
        B.add(user5);
 
        List<User> distinctList = new ArrayList<User>();
        distinctList.addAll(A);
        distinctList.retainAll(B);
             //distinctList.retainAll(B); 结果: 姓名:ZhangLiang---类型:3
for (User obj : distinctList) {System.out.println("姓名:" + obj.getName() + "---" + "类型:"+ obj.getType());}}}结果:姓名:LiMing---类型:1 姓名:WangHong---类型:2
 

转载:https://blog.csdn.net/weixin_35843891/article/details/79686719 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值