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

关于#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日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line