关于#JavaList<Object> 求差集#的问题,如何解决?

问题遇到的现象和发生背景

List<实体类>
List1 里面的某个元素的 id name 的值如果与list2 里面的某个元素的id name 的值都相同,则List1不要此元素

问题相关代码,请勿粘贴截图

img

Tips:如果需要删除或添加数据,不要使用Arrays.asList()方法生成List,此方法返回的ArrayList是Arrays它自己的内部类,没有实现add()和remove()方法,删除或添加数据时会报错。

问题的解决方法

  1. 循环遍历法

    while (iterator1.hasNext()) {
     User user = iterator1.next();
     for (User u : list2) {
         if (u.getId() == user.getId() && Objects.equals(u.getName(), user.getName())) {
             iterator1.remove();
             break;
         }
     }
    }
    
  2. 重写User类的equals方法
    重写之后,相同id和name的User会当作是同一个对象。

    @Override
    public boolean equals(Object o) {
     if (this == o) {
         return true;
     }
     if (o == null || getClass() != o.getClass()) {
         return false;
     }
     User user = (User) o;
     return id == user.id && Objects.equals(name, user.name);
    }
    

    然后再调用removeAll()方法,去除相同对象。

    list1.removeAll(list2);
    

若觉得有用,望采纳!