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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。