关于List时removeAll()注意事项

今天又踩了一个坑,故事是这样的:项目中用到@功能,在点击@的时候,显示用户关注的用户列表,为了改善用户体验(用户基本都@那么几个人),要把@ 的历史记录添加到用户关注的用户列表中,并移除重复的用户。
先说下我的思路:
1、拿到关注的用户和历史@用户;
2、使用removeAll()和addAll()操作这两个list拿到要显示的list

List<User> users = event.data;
if (!StringUtil.isEmpty(mAtUserHistoryStr)) {
    mAtUserHistoryList = JSON.parseArray(mAtUserHistoryStr, User.class);
    users.removeAll(mAtUserHistoryList);
    users.addAll(0, mAtUserHistoryList);
}
showList(users);

3、在用户@好友的时候更新历史@记录
4、把历史@记录转为JSON存到SP中

private void updateRecentAtUser(User item) {
    mAtUserHistoryList.remove(item);
    mAtUserHistoryList.add(0, item);
    mAtUserHistoryStr = JSON.toJSONString(mAtUserHistoryList);
    SPUtils.getInstance().put(Consts.SP_KEY_AT_USER_HISTORY, mAtUserHistoryStr);
}

按照以上步骤写代码,写完后,运行程序却发现removeAll并没有生效,调试了下返回值为false。百思不得姐,于是就上网搜索了一下,如何使用Java List等集合类的removeAll方法 (⊙﹏⊙)b 呵呵、前段时间同事还问我重写equals方法的问题呢,这会儿自己居然忘记重写了。

在此记录一下

在执行removeAll方法时是通过equals方法来判断集合元素是否相等的,如果没有Override equals方法,其默认的仍是比较对象,所以会出现上述问题!

归根到底,还是基础没有掌握牢固,同时也给自己提了个醒,写实体类时尽量Override hashCode和equals方法,不这样说不定哪天就会出问题。

问题综述完毕,当然,这个问题实质上很简单,只希望给遇到有同样疑问的朋友一点帮助。

贴上代码:

public class User extends Model implements Serializable {
    // uid 用户id (ActiveRecord内部已占用了id字段)
    @Column(unique = true, onUniqueConflict = Column.ConflictAction.REPLACE)
    public long uid;
    @Column
    public String name;
    @Column
    public int countAnswer;//回答次数
    @Column
    public int countVote;// 被赞次数
    @Column
    public int countFocused;// 粉丝数
    @Column
    public boolean focusedByMe;// 我是否关注了此用户
    @Column
    public boolean focusingMe;// 此用户是否关注了我
    public String signature;// 用户个性签名
    //每个ActiveRecord model都必须有默认构造函数
    public User() {super();}
    public User(long uid,String name){
        super();
        this.uid = uid;
        this.name = name;
    }
    //重写equals方法
    @Override
    public boolean equals(Object o) {
        return o instanceof User
                && this.uid == ((User)o).uid
                && this.name.equals(((User)o).name);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,634评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 人还要学会丢弃,就像丢弃那些不用的衣、物一样,腾出家里有限的空间。人只有丢弃了那些身外之物,才会获得心灵的空间。丢...
    罗掌柜real阅读 240评论 0 0
  • 喜欢你,就像下雨天你和你的伞最配爱淋雨的她 喜欢你,就像是酒精爱上了火焰, 喜欢你,就像阴雨天喜欢吃巧克力 喜欢你...
    向杨春泥阅读 288评论 0 4