m0_58301703 2022-03-27 17:10 采纳率: 100%
浏览 38
已结题

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

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

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

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

img

  • 写回答

1条回答 默认 最新

  • @ chen 2022-03-29 23:32
    关注

    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);
      

    若觉得有用,望采纳!
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月27日